来自 clang/llvm 编译器的重复符号错误
Duplicate Symbol error from clang/llvm compiler
今晚在一个项目上工作时,我为一个链接器错误而苦苦挣扎了一段时间,该错误抱怨"重复符号"。
我最终发现我定义了一个辅助函数,而不仅仅是在我的头文件中声明,这就是问题的根源(追逐这个浪费了一个多小时)。
为什么我可以像这样在我的标头中定义内联函数;
int get_val const {return r;}
但是类外的相同定义会引发链接器错误?
类内成员函数定义隐式标记为inline
,而非成员函数定义则不是,因此,如果您的定义位于头文件中,则只要多个翻译单元包含您的标头,就会破坏一个定义规则 (ODR)。 inline
提供了一种解决此问题的方法。
因此,您需要将非成员函数显式标记为inline
:
inline int foo() {return 42;}
或者,仅在标头中声明它并在.cpp
文件中定义它。
请参阅这篇关于inline
函数的相关文章。
如果需要内联函数,则应在头文件中定义它。你可以看到C++ Primer(4th edtion),其中有一些关于内联函数的页面。我想你可以在那里得到答案。
相关文章:
- 在C++中使用内联方法时出现未定义的符号错误
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 函数指针给我"重新声明为不同类型的符号"错误
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- 函数路径追加上未解决的外部符号错误
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- C++ XCODE ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -
- 共享库中使用"使用命名空间"定义的符号错误
- 在FreesWitch中使用AWS C SDK加载模块时未定义的符号错误
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- C++编译错误LNK2019:未解决的外部符号错误
- VTK / ITK/ QT - 未解决的外部符号错误 (LNK2001)
- QT创建者:简单程序未解决的外部符号和外部符号错误
- C++编译错误:ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v
- 标准::字符串::空的未定义符号错误;Mac OS High Sierra 上的 c++ 标准方法链接错误
- ld:找不到体系结构x86_64 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 由于使用未签名的INT,因此在Variadic模板C 上未解决的外部符号错误
- OSX MOJAVE -LD:架构X86_64 clang找不到符号:错误:链接器命令失败,出口代码1
- 使用从WINRT网格类派生的抽象类时,Casttobase未解决的外部符号错误
- LD:架构x86_64 clang找不到符号:错误:链接器命令失败,出口代码1(使用-v to See