导致ld:重复符号的原因
What is causing ld: duplicate symbol
ld:重复符号字符串函数::中的intToString(int)
/Build/Intermediates/Y36PJC-mrvikmil.build/Debug/Y36PJC-mrvikmil.build/Objects-normal/x86_64/ServerSocket.o and
/Build/Intermediates/Y36PJC-mrvikmil.build/Debug/Y36PJC-mrvikmil.build/Objects-normal/x86_64/main.o
用于体系结构x86_64
函数StringFunctions::intToString(int)在StringFunctions.h中
包括main.cpp:
#include <iostream>
#include <string>
#include "Exception.h" //does not include anything more
#include "ServerConsole.h"
/*
which includes ServerSocket.h which includes ClientSocket.h which includes StringFunctions.h
AND
ServerSocket.h includes SocketException.h which includes StringFunctions.h
*/
包括ServerSocket.cpp:
#include <iostream>
#include <string>
#include "InvalidPortException.h" //does not include anything more
#include "SocketException.h" //which includes StringFunctions.h
#include "ClientSocket.h" //which includes SocketException.h which includes StringFunctions.h
#include "StringFunctions.h" //StringFunctions.h
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <errno.h>
我相信,只要我在.h文件中有东西,我就可以在任何地方包含几乎任何东西。。。
我的所有文件都包含guard(#ifndef…#define…)
请帮忙。
您必须将函数定义为inline
或将其实现移动到cpp文件中。否则,它将存在于两个对象中,C++将不知道要链接哪一个(尽管它们是相同的)。
Include guard将避免在同一代码文件/对象中多次具有相同的标头。然而,他们不会避免在多个对象文件中有相同的代码,因为每个对象文件都是自己创建的,所有定义都重置了。
相关文章:
- LD:尝试编译项目时找不到架构x86_64符号
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- /usr/bin/ld: /tmp/cc9zxSDP.o: 对符号的未定义引用
- 编译问题LD:不满意的符号
- ld:Xcode 中架构x86_64的 1 个重复符号
- MacOS LD:找不到符号(x86_64)
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- OSX CGGetActiveDisplayList -> ld:找不到体系结构x86_64的符号
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See
- 英特尔 MKL 和 JNI:如何添加 ld 从中搜索符号的共享库?
- GCC LD:构造I386找不到符号
- 尽管存在符号链接,但 ld 无法加载库
- 无法导出mexfunction:符号未定义的collect.exe2.exe:错误:ld返回1退出状态
- ld:对于架构x86_64 row :: AddColumn找不到的符号
- GCC:Get LD:对于架构X86_64在OS X 10.11.5上找不到的符号
- ld:1 个重复符号用于架构x86_64 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 体系结构x86_64的未定义符号;ld:找不到体系结构x86_64的符号