c++ - 命名空间中的内联函数在 gcc 链接期间生成重复符号

标签 c++ gcc duplicates inline

我有一个带有内联函数的命名空间,如果有多个源文件,它将被使用。 尝试链接我的应用程序时,内联函数被报告为重复符号。 似乎我的代码根本不会内联函数,我想知道这是否是预期的行为以及如何最好地处理它。

我使用以下 gcc 选项: -g -Wextra -pedantic -Wmissing-field-initializers -Wredundant-decls -Wfloat-equal -Wno-reorder -Wno-long-long 在 VC7 环境中构建时,相同的代码风格似乎可以正确编译和链接。

下面的代码示例展示了代码的结构:

/* header.h */
namespace myNamespace {
inline bool myFunction() {return true;}
}

/* use_1.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...

/* use_2.cpp */
#include "header.h"
...
bool OK = myNamespace::myFunction();
...

最佳答案

删除 dll/exe 的构建目录并重新编译。

构建可能存在一些问题。正如 OP 在上面的评论中提到的那样,它可能是预编译的 header 。我遇到了完全相同的问题,删除构建目录并重新编译解决了它。

关于c++ - 命名空间中的内联函数在 gcc 链接期间生成重复符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3763746/

相关文章:

c++ - 我可以将指针传递给指针,分配内存,然后将其传回吗?

c++ - 我不能重载输入运算符来输入一个字符数组(C 风格字符串),这是我的类的一个成员变量吗?

c++ - 在使用 GCC 4.8.5 构建的应用程序中未定义对 cxx11 函数的引用

c++ - 从数组 C++ 中删除重复项

Python Pandas - 如果某些值为空则合并行

c - 查找重复项和次数

C# vs C++ 三元运算符

java - 数组类型相同,链表类型不同

c++ - 现代编译器优化如何将递归转换为返回常量?

c++ - 使用 GCC 或 Clang 编译 Microsoft Visual Studio Windows 库