私は、既存のglibcターゲットgcc/binutilsツールチェーン上でuClibcを使用できるようにするためにスクリプトを作成しています。残った1つの問題は、pthread_cancel
がdlopen
libgcc_s.so.1
になることです。ホストのgccで提供されているバージョンは、glibcのに依存するようにリンクされているので、私が代わりに交換libgcc_s.so.1
作るためにlibgcc_eh.a
から必要なシンボル(とその依存関係)に引っ張ってld
さん-u
オプションを使用しています:隠し視認性シンボルをGNU binutilsで再表示する方法はありますか?
gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
-Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1
を
原則として私は実行されるでしょうが、libgcc_eh.a
のすべてのシンボルは可視性がhiddenに設定されているので、出力.so
ファイルではすべてローカルになり、.dynsym
シンボルテーブルに追加されません。
私はbinutilsのを使用する方法を探しています(おそらく、objcopy
?またはリンカスクリプト?).so
ファイルまたはこれらのシンボルを非非表示にlibgcc_eh.a
で元.o
のファイルのいずれかで。これは可能ですか?
おそらく 'libgcc_eh.a'のオブジェクトファイルは、共有された' libgcc_s.so'が使われていないときに引っ張られるので、PIC共有ライブラリやPIE実行ファイルで使えるはずですが、間違いかもしれません。いずれにしても、textrelが許可されているi386では少なくとも動作します。 –
あなたの編集を見ただけです。なぜなら、コードがPICとしてコンパイルされている理由を説明していると思うからです。 –