開始錯誤的做法
在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<貌似在調用之前聲明一下也可以。
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。