我總是得到以下錯誤,即使我已經把頭文件中的include guard。爲什麼頭文件中的全局變量會導致鏈接錯誤?
duplicate symbol _Bittorrent in:
/Users/tracking/Library/Developer/Xcode/DerivedData/SHT-giuwkwyqonghabcqbvbwpucmavvg/Build/Intermediates/SHT.build/Debug/SHT.build/Objects-normal/x86_64/main.o
/Users/tracking/Library/Developer/Xcode/DerivedData/SHT-giuwkwyqonghabcqbvbwpucmavvg/Build/Intermediates/SHT.build/Debug/SHT.build/Objects-normal/x86_64/Handshake.o
duplicate symbol _eight_byte in:
/Users/tracking/Library/Developer/Xcode/DerivedData/SHT-giuwkwyqonghabcqbvbwpucmavvg/Build/Intermediates/SHT.build/Debug/SHT.build/Objects-normal/x86_64/main.o
/Users/tracking/Library/Developer/Xcode/DerivedData/SHT-giuwkwyqonghabcqbvbwpucmavvg/Build/Intermediates/SHT.build/Debug/SHT.build/Objects-normal/x86_64/Handshake.o
ld: 2 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
下面是.H頭文件,.c文件,和main.c中
的main.c
#include "Handshake.h"
int main(int argc, char** argv)
{
// some code.
return 0;
}
Handshake.h
#ifndef SHT_Handshake_h
#define SHT_Handshake_h
const char *Bittorrent = "BitTorrent protocol";
const char eight_byte[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
#endif
Handshake.c
#include "Handshake.h"
int Send_fisrt_Handshake(download_connection *pPeer, Handshake *necessary_info)
{
//some statements
return 1;
}
void Set_Handshake_information(TorrentFile* pArg, Handshake *pYours)
{
//some statements
}
但是,如果我從頭文件中刪除全局變量,這些代碼將成功編譯。
我不明白爲什麼。有人能解釋爲什麼嗎?先謝謝你。
不要將全局變量定義放在頭文件中。只在其中放置聲明。 – johnchen902