首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符号未找到(ldd),但它在那里(nm)

符号未找到(ldd),但它在那里(nm)
EN

Stack Overflow用户
提问于 2014-02-18 20:01:09
回答 1查看 3.3K关注 0票数 1

我的应用程序抱怨它找不到一个符号:

代码语言:javascript
复制
fatal: relocation error: file /foo/libxslt4c.so.113: symbol __1cDstdEcout_: referenced symbol not found (bar.c:1330)

ldd也这么说:

代码语言:javascript
复制
ldd -d /bar/libxmllib.so
        libc.so.1 =>     /lib/sparcv9/libc.so.1
        [...]
        libxml4c.so.58 =>        /foo/libxml4c.so.58
        libxslt4c.so.113 =>      /foo/libxslt4c.so.113
        [...]
        /platform/SUNW,SPARC-Enterprise/lib/sparcv9/libc_psr.so.1
        /lib/sparcv9/../libm/sparcv9/libm_hwcap1.so.2
        symbol not found: __1cDstdEcout_                (/foo/libxslt4c.so.113)
        symbol not found: __1cDstdEcerr_                (/foo/libxslt4c.so.113)

然而,符号就在那里-- nm就是这么说的:

代码语言:javascript
复制
nm /foo/libxslt4c.so.113.0 | grep __1cDstdEcerr_
[10915] |                   0|                   0|OBJT |GLOB |0    |UNDEF  |__1cDstdEcerr_

但正如你所看到的: Shndx=UNDEF。那是什么意思?我想如果有什么东西是不确定的,那就根本不存在了。但不知何故,它就在那里,尽管我的申请找不到它。

系统: Solaris 10 / UltraSPARC我的应用程序和所有库都是64位的,/foo在LD_LIBRARY_PATH_64中(/bar不在)。

编辑:与此同时,我知道民主阵线就像“需要在另一个库中解决”。我还找到了符号_1cDstdEcerr的lib --它是libCstd.so,在/usr/lib中。或者更准确地说(因为我们需要64位变量) /usr/lib/64。因此,它位于系统的默认库搜索路径之一,由crle显示。现在的问题是:当包含符号的库位于系统的搜索路径时,如何才能不解决它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-18 22:37:36

它没有得到解决,大概是因为您没有将它包含在被传递给链接器的编译标志中。

如果你有

代码语言:javascript
复制
LDFLAGS += -lCstd

在Makefile中,应该传递它,并且链接器会做正确的事情(假设您使用的是标准编译规则,它将$(LDFLAGS)附加到编译器和链接器调用中)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21864084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档