gccではなくclangを使ってGTK +プログラムをコンパイルしました。これまでのところ、私はldリンクを正しく持つことができません。ldが文句を言う:関数 "_start"で、 "__libc_csu_fini"& "__libc_csu_init"への未定義参照
このように、リンクを行うためにはgccと呼ばオリジナルメイク:
のgcc -g -O2 -export-ダイナミック-o my_application somefile.o another.o -pthread -lgnomeui-2 -lSM -lICE - ボルボボイ-2-アミノメチル-2-フルオロメチル-2-プロパノール-2-アミノ-2-プロパノール - ボランボ-2-活性化-lORBit-2 -lart_lgpl_2 -lgconf-2 -lglade-2.0 -lgtk-x11-2.0 -lgdk-x11 -2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lxml2 -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0
私は単純に上記のコマンドで打ち鳴らすでgccのに置き換えた場合、私は後者からこの警告が出ます:
打ち鳴らす:警告:コンパイル時の引数未使用:「-e XPORT-ダイナミック」
問題:clangはリンカオプションとして「-export-dynamic」を認識しないため、ldには渡されません。これにより、外部関数への参照が廃止されます。最後のバイナリが実行されると、メニューオプションもボタンも反応しません。
gccとの最終的なリンクステップを実行すると、バイナリは完全に機能します(実際にはclangでコンパイルされ、gccはリンクのみを行います)。私はgccを自分のマシンで完全に置き換えようとしているので、これは受け入れられません。
LD /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o -g -O2 -export-ダイナミックmy_applicationのsomefileという:
は、だから私はこれを試してみました.o another -o -o -lgnomeui-2 -lSM -lICE -lbonoboui-2 -lgnomevfs-2 -lgnomecanvas-2 -lgnome-2 -lpopt -lbonobo-2 -lbonobo-activation -lORBit-2 -lart_lgpl_2 -lgconf- 2 -lglade-2.0 -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject- 2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 -lxml2 -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0
最初の3つのオブジェクトを追加することで、「_startが見つかりません」というメッセージは表示されません。しかし、その後、私は上記2件の苦情を取得:
/usr/lib/crt1.o: (の.text + 0x12を):機能
_start
で__libc_csu_fini
/usr/lib/crt1.oに未定義の参照: (の.text + 0x19):関数_start
に未定義参照
__libc_csu_init
に私は無駄にもcrt1.o初前に、リストにcrtbegin.oとcrtend.oを追加しようとしました。リンカの正しい呼び出しは何ですか?
(ポスト編集):他に何も機能しない場合は、正確なGCCをリンクに使用されている場合GCCはLDに渡しているパラメータものをキャッチする方法はありますか?
あなたはclangとリンクしてみましたか? –
はい、私はclangで試しました - もっと明白にするために書き直します –