2016-11-18 4 views
0

ldは奇妙な動作をしており、何が起こっているのか理解したいと思います。iostreamを含むダイナミックライブラリをリンクできません

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

// awesome stuff here 

私はg++ -fPIC -c mycode.cppでそれをコンパイルし、ld -Bshareable -o libmylib.so mycode.oとリンク:mycode.cppで、私は次のよう持っています。魅力のように動作します。

coutmycode.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を知っ++)

+2

あなたの答えが正しいことを確かめてください:[g ++だけではなくg ++ -cとld](http://stackoverflow.com/questions/6704780/using-only-g-works-but- not-gc-and-ld) –

+1

http://www.linuxquestions.org/questions/programming-9/fyi-shared-libs-and-iostream-c-331113/page2.html#post2936978を参照してください。 gccの非常に古いバージョンです – Leon

+0

ldを直接呼び出さないでください。 GCCとのリンク – rubenvb

答えて

1

リンクを:私の問題は、私はボンネットの下に何を理解したい、です。魅力のように動作します。

偶然によってが動作します。

ユーザーレベルのコードがldに直接リンクしないでん、と常には、リンクを実行するために、適切なコンパイラドライバ(ここではg++)を使用する必要があります。それ以外のものは、あなたが変わったリンク時や実行時のエラーで失敗するでしょう。

関連する問題