当我在我的机器上编译并链接.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 batch:
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,导致这些错误并导致其他机器上的错误。
任何帮助将不胜感激
答案 0 :(得分: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
所属的包,并要求您的客户/客户安装它。