【问题标题】:Can't link a dynamic lib including iostream [duplicate]无法链接包括 iostream 的动态库 [重复]
【发布时间】:2016-11-18 18:20:24
【问题描述】:

ld 行为怪异,我想了解发生了什么。在mycode.cpp 中,我有以下内容:

#include <algorithm>
#include "mycode.hpp"

// awesome stuff here

我用g++ -fPIC -c mycode.cpp 编译它并用ld -Bshareable -o libmylib.so mycode.o 链接它。像魅力一样工作。

然后我想在mycode.cpp 中调用cout。实际上,即使在添加 cout 之前,如果我只是在上面的代码中添加 #include &lt;iostream&gt;,在链接时我就会收到错误

mycode.o: In function `__static_initialization_and_destruction_0(int, int)':
mycode.cpp:(.text+0x50): undefined reference to `__dso_handle'
ld: mycode.o: relocation R_X86_64_PC32 against undefined hidden symbol `__dso_handle' can not be used when making a shared object
ld: final link failed: Bad value

如果我将它与g++ -shared 链接,它可以工作,但这不是重点。我不明白这里出了什么问题,我正在寻找见解。

编辑:我知道必须直接调用g++ 而不是ld。我的问题是,我想了解引擎盖下的内容:为什么在算法已经存在时包含 iostream 会破坏事物(所以ld 知道 stdc++)

【问题讨论】:

标签: c++ linker g++ ld


【解决方案1】:

将其与ld -Bshareable -o libmylib.so mycode.o 链接。像魅力一样工作。

它只是偶然起作用。

用户级代码应该从不直接与ld 链接,并且应该始终使用适当的编译器驱动程序(此处为g++)来执行链接。其他任何事情,您都会因奇怪的链接时间或运行时错误而失败(就像您在此处所做的那样)。

【讨论】:

    猜你喜欢
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多