Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t链接包含iostream的动态库_C++_Linker_G++_Ld - Fatal编程技术网

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