Developer Studio 12.5 を使用して Solaris 11.3 にリンクする際に問題が発生しています。
コードは正常にコンパイルされているように見えますが、リンク段階で失敗します。
CC -o bin/libBlah.so -mt -G -z defs -fast -s -KPIC -xarch=generic \
-M mapfiles/solaris.map -library=stlport4 -staticlib=stlport4 \
<my .o files> <some boost .a libs> <openssl .a libs> \
-lCrun -lsocket -lnsl -lposix4 -lc -lm -lw -ldl
Undefined first referenced
symbol in file
void __Crun::ex_end_init() obj/Blah.o
void __Crun::ex_start_init() obj/Blah.o
ld: fatal: symbol referencing errors
gmake: *** [bin/libBlah.so] Error 2
コマンド ライン (リンク オプション) から「-z defs」を削除すると、正常にリンクされます。「ldd libBlah.so」を実行しても、欠落している参照は表示されません。
同僚が「nm」を使用してシンボルを見つけましたが、これは静的な libCrun ライブラリ (共有ライブラリではありません) でのみ見つかりました。
# nm /opt/developerstudio12.5/lib/compilers/libCrun.so | grep ex_end_init
# nm /opt/developerstudio12.5/lib/compilers/libCrun.a | grep ex_end_init
00000340 T __1cG__CrunLex_end_init6F_v_
マニュアルでは、'-zdefs' を使用して不足しているシンボルを指摘するようにアドバイスしていますが、これは以前に行った (makefile には既にそのフラグがありました)。
質問は簡単です。これについてどう考えるべきか、それについて何をすべきか?