c++ - 无法链接动态库,包括 iostream

标签 c++ linker g++ ld

<分区>

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

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

// awesome stuff here

我用 g++ -fPIC -c mycode.cpp 编译它并将其链接到 ld -Bshareable -o libmylib.so mycode.o .就像一个魅力。

那我想调用coutmycode.cpp .实际上,甚至在添加这个 cout 之前,如果我只添加 #include <iostream>在上面的代码中,链接时出现错误

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++)

最佳答案

link it with ld -Bshareable -o libmylib.so mycode.o. Works like a charm.

它只是偶然起作用。

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

关于c++ - 无法链接动态库,包括 iostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683665/

相关文章:

c++ - Qt构建为没有dll的单个exe文件

c++ - 为什么是 some_statement;;;;在 C++ 中有效吗?

c++ - c嵌套结构上的g++编译错误

c++ - 从另一个表单显示表单

c++ - MSVC - boost::python 静态链接到 .dll (.pyd)

ubuntu - 仅在 Ubuntu 32/64 位上出现 `boost::log2_mt` 的链接错误

c++ - g++ 与旧代码的旧目标文件链接良好

eclipse - ubuntu 上的 opencv - 找不到 lib 文件

c++ - 当 "taking address of temporary"错误妨碍干净代码时

c++ - Windows & C++ : extern & __declspec(dllimport)