gpt4 book ai didi

c - 为什么头文件中的全局变量会导致链接错误?

转载 作者:行者123 更新时间:2023-12-04 11:08:49 25 4
gpt4 key购买 nike

我总是收到以下错误,即使我在头文件中放置了包含保护。

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

主文件
#include "Handshake.h"
int main(int argc, char** argv)
{
// some code.
return 0;
}

握手文件
#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

握手文件
#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

}

但是,如果我从头文件中删除全局变量,这些代码编译成功。
我不明白为什么。有人可以解释为什么吗?先感谢您。

最佳答案

线条像

const char    *Bittorrent     =   "BitTorrent protocol";
const char eight_byte[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

定义这些全局变量,无论代码是在头文件中还是直接在 .c 中( #include 只是头内容的文本插入)。
相反,您应该在唯一的源文件中定义定义并更改标题以提供 extern改为声明:
extern const char *Bittorrent;
extern const char *eight_byte;

然后可以编译使用这些变量的所有源代码,但链接器只会对这些变量进行一次编译。

关于c - 为什么头文件中的全局变量会导致链接错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17593048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com