gpt4 book ai didi

c - AIX 6.1 : WARNING: Duplicate symbol:

转载 作者:太空宇宙 更新时间:2023-11-04 03:04:08 25 4
gpt4 key购买 nike

我正忙于将用 C 编写的应用程序从 Solaris SPARC 10 移植到 AIX 6.1。

我收到大量“警告:重复符号:”错误。我曾尝试使用 #ifndef 仅在需要时包含头文件,但仍然得到相同的副本。

有什么想法会导致这种情况吗?我看过类似的帖子,但还没有具体内容。

作为一个例子,我得到:

ld: 0711-224 WARNING: Duplicate symbol: onCheckCallbackFunc
ld: 0711-224 WARNING: Duplicate symbol: onCommitCallbackFunc
ld: 0711-224 WARNING: Duplicate symbol: onConfirmCallbackFunc
ld: 0711-224 WARNING: Duplicate symbol: onRollbackCallbackFunc
ld: 0711-224 WARNING: Duplicate symbol: onMessageArrivedCallbackFunc

如果我在该库上运行以下命令:

nm -X64 ./libtest.so

我得到以下(只是一个片段)

onCheck:F-1          -         692
onCheckCallbackFunc B 536877592 8
onCheckCallbackFunc d 536877064 8
onCheckCallbackFunc:G820 - 0
onCommit D 536876400
onCommit d 536876400 24
onCommit d 536877024 8
onCommit:F-1 - 824
onCommitCallbackFunc B 536877600 8
onCommitCallbackFunc d 536877072 8
onCommitCallbackFunc:G820 - 0
onConfirm D 536876424
onConfirm d 536876424 24
onConfirm d 536877032 8
onConfirm:F-1 - 956
onConfirmCallbackFunc B 536877608 8
onConfirmCallbackFunc d 536877080 8
onConfirmCallbackFunc:G820 - 0

为什么上面的符号重复?

再次感谢

林顿

最佳答案

链接器尝试链接包含同名对象的对象文件。

假设您没有使用相同的名称明确声明不同的对象,这很可能是通过将相同的源代码编译为不同的对象文件,然后将这些对象文件全部传递给链接器而发生的。

发生这种情况的常见情况是让编译器 #include 一些源代码不止一次。

另一种可能的情况是,您使用相同的源创建了两个库,并尝试将它们都链接到您的主对象。

或者您将源代码包含到库中到主构建中。

在任何此类情况下,链接器都会阻塞。

关于c - AIX 6.1 : WARNING: Duplicate symbol:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7821681/

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