#including <iostream>打破了共享对象</iostream>的链接

时间:2013-05-06 20:26:36

标签: c++ shared-libraries dynamic-linking

我有以下代码:

#include <iostream>

extern "C" {
    void foo() {
        std::cout << "Wow, It's working!" << std::endl;
    }
}

不包含iostream并正确打印库链接。但是当我包含并尝试打印时,编译器会给出以下错误:

Compiling: main.cpp
Linking dynamic library: libfoo.so
/usr/bin/ld: obj/main.o: перемещение R_X86_64_32 для «.rodata» не может использоваться при создании общего объекта; перекомпилируйте с -fPIC
obj/main.o: could not read symbols: Некорректное значение
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

对不起俄语中的错误,但我没有确切的英文翻译。也许这个翻译会有所帮助:

Compiling: main.cpp
Linking dynamic library: libfoo.so
/usr/bin/ld: obj/main.o: relocation R_X86_64_32 against ".rodata" can not be used when making shared object; recompile with -fPIC
obj/main.o: could not read symbols: bad value
collect2: error: ld terminated with exit code 1
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

我必须如何包含和编译以使其正常工作?

P.S。 语法可能非常糟糕:英语不是我的母语

1 个答案:

答案 0 :(得分:1)

您是否尝试过-lstdc++个链接器切换?你的makefile是怎么样的?