启动错误的做法
在global.h声明和定义变量
int sharedData = 9;编译出错
Building target: CTest Invoking: GCC C++ Linker g++ -o "CTest" ./src/CTest.o ./src/global.o ./src/global.o:(.data+0x0): `sharedData'被多次定义 ./src/CTest.o:(.data+0x0):第一次在此定义 collect2: 错误: ld 返回 1
正确的做法。
在global.h头文件声明
extern int sharedData ;
在global.cpp定义初始化
int sharedData = 9;
然后在其它文件直接调用就能够了
int main(void) { cout<<sharedData<<endl; return 0; }
不用包括头文件,直接在调用之前声明一下也能够。
extern int sharedData ;
看一下编译
make all Building file: ../src/CTest.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/CTest.d" -MT"src/CTest.d" -o "src/CTest.o" "../src/CTest.cpp" Finished building: ../src/CTest.cpp Building file: ../src/global.cpp Invoking: GCC C++ Compiler g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/global.d" -MT"src/global.d" -o "src/global.o" "../src/global.cpp" Finished building: ../src/global.cpp Building target: CTest Invoking: GCC C++ Linker g++ -o "CTest" ./src/CTest.o ./src/global.o Finished building target: CTest
第一步
CTest.cpp编译为CTest.o 此处其有用到了global文件的变量,因为此阶段仅仅须要包括头文件,让CTest.cpp知道global文件变量的声明就可以。
第二部
global.cpp编译为global.o
第三部
链接CTest.o和global.o ,生成可运行文件CTest。
版权声明:本文博客原创文章。博客,未经同意,不得转载。