C++ Can';t链接包含iostream的动态库
C++ Can';t链接包含iostream的动态库,c++,linker,g++,ld,C++,Linker,G++,Ld,ld行为古怪,我想知道发生了什么。在mycode.cpp中,我有以下内容: #include <algorithm> #include "mycode.hpp" // awesome stuff here 如果我将它链接到g++-shared,它会工作,但这不是重点。我不明白这里出了什么问题,我正在寻找见解 编辑:我知道必须调用g++,而不是直接调用ld。我的问题是,我想了解隐藏在幕后的是什么:为什么在算法已经存在的情况下包含iostream break东西(所以ld知道stdc
ld
行为古怪,我想知道发生了什么。在mycode.cpp中,我有以下内容:
#include <algorithm>
#include "mycode.hpp"
// awesome stuff here
如果我将它链接到g++-shared
,它会工作,但这不是重点。我不明白这里出了什么问题,我正在寻找见解
编辑:我知道必须调用g++
,而不是直接调用ld
。我的问题是,我想了解隐藏在幕后的是什么:为什么在算法已经存在的情况下包含iostream break东西(所以ld
知道stdc++)
将其链接到ld-bsharable-o libmylib.so mycode.o
。工作起来很有魅力
它只是偶然起作用的
用户级代码不应直接与ld
链接,应始终使用适当的编译器驱动程序(g++
此处)执行链接。否则,您将因奇怪的链接时间或运行时错误而失败(就像您在这里所做的那样)
将其链接到ld-bsharable-o libmylib.so mycode.o
。工作起来很有魅力
它只是偶然起作用的
用户级代码不应直接与
ld
链接,应始终使用适当的编译器驱动程序(g++
此处)执行链接。任何其他操作,您都会因奇怪的链接时间或运行时错误而失败(就像您在这里所做的)。非常确定您的答案就在这里:请参阅,但要考虑到这是针对非常旧版本的gccDon,不要直接调用ld。链接到GCC。非常确定你的答案是正确的:请参阅,但要考虑到它是针对非常旧版本的gccDon的,不要直接调用ld。与GCC链接。
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