0

我在使用 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 已经有那个标志),所以,我无法解释我所看到的。

问题很简单:我该怎么做?我该怎么做?

4

0 回答 0