ld
は奇妙な動作をしており、何が起こっているのか理解したいと思います。iostreamを含むダイナミックライブラリをリンクできません
#include <algorithm>
#include "mycode.hpp"
// awesome stuff here
私はg++ -fPIC -c mycode.cpp
でそれをコンパイルし、ld -Bshareable -o libmylib.so mycode.o
とリンク:mycode.cpp
で、私は次のよう持っています。魅力のように動作します。
cout
をmycode.cpp
に電話します。実は、でも私は上記のコードで#include <iostream>
を追加する場合のリンクながら、このcout
を追加する前に、私はg++ -shared
とリンクした場合、私はそれが動作しますが、エラーに
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
を取得し、それはポイントではありません。私はここで何が間違っているのか理解していないし、洞察を求めている。
編集:ld
の代わりにg++
に直接電話する必要があります。 ld -Bshareable -o libmylib.so mycode.o
とアルゴリズムはすでにここにいる間のiostreamブレークのものを含め、なぜ(そうld
がSTDCを知っ++)
あなたの答えが正しいことを確かめてください:[g ++だけではなくg ++ -cとld](http://stackoverflow.com/questions/6704780/using-only-g-works-but- not-gc-and-ld) –
http://www.linuxquestions.org/questions/programming-9/fyi-shared-libs-and-iostream-c-331113/page2.html#post2936978を参照してください。 gccの非常に古いバージョンです – Leon
ldを直接呼び出さないでください。 GCCとのリンク – rubenvb