0

私は次のコードを持っています:

#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

動作させるには、どのようにインクルードしてコンパイルする必要がありますか?

PS 文法が非常に悪い場合があります。英語は私の母国語ではありません

4

1 に答える 1

1

-lstdc++リンカースイッチを試しましたか?メイクファイルはどのように見えますか?

于 2013-05-06T20:30:56.783 に答える