【问题标题】:CC not linking libCrun.so.1CC 未链接 libCrun.so.1
【发布时间】:2012-08-31 03:39:58
【问题描述】:

当我在我的机器上编译和链接一个 .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 导致这些错误并导致其他机器上的错误。

任何帮助将不胜感激

【问题讨论】:

    标签: linker solaris acc


    【解决方案1】:

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

    您应该从您的LDFLAGS 中删除-L/usr/lib/sparcv9-lCrun -- SunStudio 会自行正确添加它们。

    我的假设是我错误地链接了 libCrun.so.1

    否:您与它的链接正确。问题是在问题机器上libCrun.so.1(显然)根本没有安装。该库应该默认安装——没有它,C++ 应用程序通常不会运行。您应该找出 libCrun.so.1 属于哪个包,并要求您的客户/客户安装它。

    【讨论】:

    • 如果我做一个静态链接,能解决问题吗?
    • @user823848 静态链接可能会解决那个问题,但也可能会引入 50 个新问题。 UNIX 上的静态链接几乎永远不会是正确的答案。
    猜你喜欢
    • 2022-08-10
    • 1970-01-01
    • 2012-10-18
    • 2016-06-16
    • 1970-01-01
    • 2022-07-08
    • 2023-01-07
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多