问题标签 [multiple-definition-error]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 仅标头库和多个定义错误
我想写一个库来使用,你只需要包含一个头文件。但是,如果您有多个源文件并在两者中都包含标头,则会出现多个定义错误,因为该库既在标头中声明又在标头中定义。我认为,在 Boost 中,我已经看到了只有标头的库。他们是怎么做到的?
c++ - 如何避免多定义链接错误?
除了将hello()
函数移动到另一个源 (.cpp) 文件或重命名函数之外。有没有其他方法可以避免链接错误?
静态库A.h
静态LibA.cpp
输出:
静态库B.h
静态库B.cpp
输出:
主文件
输出:
c - linux 的 gcc __attribute__((selectany)) 替代方案?
我想知道__attribute__((selectany))
在 linux 中是否有替代方案?
我想定义类似的东西:
在头文件中并将其包含在许多将链接在一起的 .c 文件中。因此链接器将看到多个“a”的定义,因此不会链接。我读过这个属性(selectany),它只使用第一次看到的“a”定义,不幸的是它只适用于ms windows。所以问题是:在 linux 中是否有替代方法?
编辑:实际的问题是:有没有办法指示链接器仅使用第一次看到的定义并忽略任何其他定义,即使它们不同?我知道有很多方法可以定义我的数据,我不是在寻找如何定义我的数据的解决方案,而是我想知道是否有一种方法可以有多个定义并使链接器与第一个看到的一起工作。 ..
c++ - C++ Qt 多重定义
我正在尝试使用 MinGW 编译器在 Qt 中使用 C++ 创建一个简单的 GUI 应用程序(到目前为止)。但是,编译器通知我我有一个multiple definition of 'WiimoteScouter::WiimoteScouter(QWidget*)'
on line 4
of wiimotescouter.cpp
. 我正在使用检查来确保没有多次包含标题,但显然它不起作用,我不知道为什么。
这是头文件:
这是cpp文件:
最后,main.cpp:
g++ - C++ 链接问题:多重定义
不幸的是,我无法在此处发布所有源代码。我可以描述结构。所有头文件都有#ifndef/#define/#endif 保护。结构如下:
- node.h - 包含在 tree.h 中
- tree.h - 包含在 tree.cpp 和 main.cpp 中
- 树.cpp
- 主文件
在全局命名空间的 node.h 中,我声明了以下独立函数:
(注意:如下所示,Path 只是一个 shared_ptr)当我尝试构建时,我收到一个多重定义错误,指出该函数存在于 tree.o 和 main.o 中:
我尝试搜索所有源文件以查看是否属实,但是,我没有在任何错误的地方看到它:
果然,它在二进制文件中。如何重组我的代码以防止出现此链接问题?
c++ - 静态 const 类成员的多重定义错误
我最近遇到了结构/类中静态常量的奇怪未定义符号中描述的问题,我试图通过将定义添加到我的所有静态 const 类成员的相应 .cpp 文件来使我的代码合规,而不仅仅是导致链接器错误的那些。
在多个编译单元中使用常量的情况下,即使定义仅在一个编译单元中,我也会遇到多个定义错误。
将初始化程序移动到定义可以防止错误,但我宁愿不这样做。
值得一提的是,虽然我目前在 Visual Studio 中工作,但此代码需要在多个平台上构建。
blackberry - 运行应用程序时出错:“xxx 多次定义”
应该怎么做才能为不同的操作系统版本构建黑莓应用程序?当同一个应用程序在 9700 OS 5.0、9800 6.0 上运行良好但在 9700 OS 6.0 上出现错误时,我看到了奇怪的行为:
错误开始jokes_480x360_:类'com.core.controller.LastMessages'多重定义
c++ - 静态链接到 pion 网络库
我正在尝试在我的应用程序中链接 pion 网络库 4.0.3。我试图在 RELEASE_STATIC 模式下简单地编译 pion::netlib - 这很有效。然而,当我在我的应用程序中链接它时,我得到了很多未解决的外部问题。
然后我发现 RELEASE_STATIC 配置定义了 PION_STATIC_LINKING,并且从另一篇关于另一个库的帖子中我发现我可能还需要在我的程序中定义 PION_STATIC_LINKING。
这样做会在以下模板中产生 100 个错误:
我尝试使用 /NODEFAULTLIB:libcmt,但仍然收到错误消息,指出某些函数已在 pion-common.lib / pion-net.lib 中定义。
有任何想法吗?:(
c++ - gcc:在 C++ 应用程序中链接 C 库会导致“多重定义”错误
我有一个可用的 C 库,我想使用 gcc 链接到 C++ 应用程序,但链接器 (g++) 给了我“多重定义”错误。使用 C 应用程序和 gcc 它可以工作。定义接口的标头都包含:
我使用“nm”命令检查了库,它确实有多个方法定义(有问题的方法不是来自公共接口)。
我的问题是:
为什么我的库有多个定义(有些有 T,有些有 U)?
如果包含文件的应用程序是 C 应用程序(我正在使用 -Wall 构建),为什么它会起作用?
我是否需要任何特殊属性或使用特定的文件扩展名才能使其工作,或者我需要回到编程学校:)?
更加注意 lib.a 文件,我可以看到其中一个对象包含两次。例如,我对同一个对象有两个部分:
我想这是问题所在?
非常感谢任何帮助。
c++ - C++:头文件中全局函数的多重定义错误
这个函数是全局的,在头文件中定义(暂时我想保留它)。
头文件还构成一个具有内联函数的特定类,其中一个函数调用这个全局函数。
源文件不包含任何出现问题的全局函数。
关于错误原因的任何提示?
如果有人感兴趣,我可以发布代码。