0

自分のマシンで.soファイルをコンパイルしてリンクすると、機能します。ファイルを誰かに配布しようとすると、エラーが発生します。

具体的には、以下に基づいて構築しています。

-bash-3.00# uname -a
SunOS bob 5.10 Generic_127127-11 sun4u sparc SUNW,Sun-Blade-1000
-bash-3.00# CC -V
CC: Sun C++ 5.9 SunOS_sparc Patch 124863-01 2007/07/25

makefileでは、次のフラグを使用しています。

CFLAGS=-m64 -library=stlport4 -KPIC
LDFLAGS=-m64 -L/usr/lib/sparcv9 -lCrun -library=stlport4 -G

マシンにエラーは表示されませんが、このエラーは報告されています

ld.so.1: batch: fatal: relocation error: file lqtbatch: symbol __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2G6Mpkc_r1_: referenced symbol not found

理由を突き止めるのに少し問題がありますが、ここに私が見ているいくつかの違いがあります。私のマシンでは、ldd -rバッチ:

ldd -r batch 
    libstlport.so.1 =>       /opt/SUNWspro/lib/stlport4/v9/libstlport.so.1
    librt.so.1 =>    /lib/sparcv9/librt.so.1
    libCrun.so.1 =>  /opt/SUNWspro/prod/lib/stlport4/v9/../../../usr/lib/v9/libCrun.so.1
    libm.so.1 =>     /lib/64/libm.so.1
    libc.so.1 =>     /lib/64/libc.so.1
    libaio.so.1 =>   /lib/64/libaio.so.1
    libmd.so.1 =>    /lib/64/libmd.so.1
    /platform/SUNW,Sun-Blade-1000/lib/sparcv9/libc_psr.so.1
    libm.so.2 =>     /lib/64/libm.so.2
    /platform/SUNW,Sun-Blade-1000/lib/sparcv9/libmd_psr.so.1

他の人はldd-rコマンドでこれを見ています

libstlport.so.1 =>   /opt/SUNWspro/lib/stlport4/v9/libstlport.so.1
librt.so.1 =>    /lib/sparcv9/librt.so.1
libm.so.1 =>     /lib/64/libm.so.1
libc.so.1 =>     /lib/64/libc.so.1
libaio.so.1 =>   /lib/64/libaio.so.1
libmd.so.1 =>    /lib/64/libmd.so.1
symbol not found: __1cG__CrunKpure_error6F_v_       (./liblqtcr.so)
symbol not found: __1cG__CrunKpure_error6F_v_       (./liblqtcr.so)
...many of these...
symbol not found: __1cG__CrunKpure_error6F_v_       (./liblqtcr.so)
/platform/SUNW,SPARC-Enterprise-T2000/lib/sparcv9/libc_psr.so.1
symbol not found: __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2G6Mpkc_r1_        (./liblqtcr.so)
symbol not found: __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___Gsubstr6kMLL_1_        (./liblqtcr.so)
libm.so.2 =>     /lib/64/libm.so.2
symbol not found: __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___2G6Mrk1_r1_        (./liblqtcr.so)
symbol not found: __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___Hreplace6MLLrk1_r1_        (./liblqtcr.so)
symbol not found: __1cDstdK_M_put_num4Ccn0ALchar_traits4Cc__Cb_6Frn0ANbasic_ostream3CTACTB__TC_4_       (./liblqtcr.so)
symbol not found: __1cDstdMbasic_string4Ccn0ALchar_traits4Cc__n0AJallocator4Cc___Gassign6MpkcL_r1_      (./liblqtcr.so)
/platform/SUNW,SPARC-Enterprise-T2000/lib/sparcv9/libmd_psr.so.1

私の仮定は、これらのエラーを引き起こし、他のマシンでエラーを引き起こしているlibCrun.so.1を誤ってリンクしているということです。

どんな助けでもいただければ幸いです

4

1 に答える 1

0

LDFLAGS=-m64 -L/usr/lib/sparcv9 -lCrun ...

との両方を削除する必要が-L/usr/lib/sparcv9あり-lCrunますLDFLAGS-SunStudioはそれらをすべて正しく追加します。

私の仮定は、libCrun.so.1を誤ってリンクしているということです。

いいえ:正しくリンクしています。問題は、問題のあるマシンlibCrun.so.1に(明らかに)まったくインストールされていないことです。そのライブラリはデフォルトでインストールする必要がありますC++。通常、ライブラリがないとアプリケーションは実行されません。どのパッケージがlibCrun.so.1属しているかを調べて、クライアント/顧客にインストールを依頼する必要があります。

于 2012-08-31T05:39:46.817 に答える