linux不能识别 符号,linux – Linked无法找到符号,但读取库并存在符号

我一直在尝试编译我的项目,我得到了未定义的引用错误.例如.:

installertest.cpp:(.text+0x9d1): undefined reference to `XmlRpcValue::makeArray()'

...

installertest.cpp:(.text+0xede): undefined reference to `dbcancel'

installertest.cpp:(.text+0xefd): undefined reference to `dbfcmd'

installertest.cpp:(.text+0xf0f): undefined reference to `dbsqlexec'

installertest.cpp:(.text+0xf2d): undefined reference to `SHA1_Init'

...

我的命令行是:

g++ -o installertest \

-lsybdb \

-lxmlrpc \

-lxmlrpc_cpp \

-lxmlrpc_xmlparse \

-lxmlrpc_xmltok \

-lxmlrpc_util \

-lxmlrpc++ \

-lxmlrpc_server_cgi \

-lssl \

-std=c++0x \

ContractData.o installertest.o

objdump -T显示符号位于.so文件中.例如.:

libsybdb.so:

...

0000000000011c30 g DF .text 0000000000000083 Base dbcancel

...

/usr/lib/libxmlrpc_cpp.so:

...

0000000000002e78 g DF .text 0000000000000092 Base _ZN11XmlRpcValue9makeArrayEv

...

strace显示链接器正在打开和读取库文件:

...

[pid 5019] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libsybdb.so", {st_mode=S_IFREG|0644, st_size=421608, ...}) = 0

[pid 5019] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/libsybdb.so", O_RDONLY) = 7

[pid 5019] fcntl(7, F_GETFD) = 0

[pid 5019] fcntl(7, F_SETFD, FD_CLOEXEC) = 0

[pid 5019] fstat(7, {st_mode=S_IFREG|0644, st_size=421608, ...}) = 0

[pid 5019] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b16c200c000

[pid 5019] lseek(7, 0, SEEK_SET) = 0

[pid 5019] read(7, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\237\0\0\0\0\0\0"..., 4096) = 4096

...

[pid 5019] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libxmlrpc.so", {st_mode=S_IFREG|0644, st_size=80936, ...}) = 0

[pid 5019] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../../lib/libxmlrpc.so", O_RDONLY) = 8

[pid 5019] fcntl(8, F_GETFD) = 0

[pid 5019] fcntl(8, F_SETFD, FD_CLOEXEC) = 0

[pid 5019] fstat(8, {st_mode=S_IFREG|0644, st_size=80936, ...}) = 0

[pid 5019] mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b16c200d000

[pid 5019] lseek(8, 0, SEEK_SET) = 0

[pid 5019] read(8, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300?\0\0\0\0\0\0"..., 4096) = 4096

...

涉及的所有文件都针对x86-64,C库的头部是外部“C”.我已经尝试了我能想到的一切,它仍然无法链接.

我甚至尝试删除所有C 11代码并在没有命令行开关的情况下进行编译,但仍然没有.

我的系统是Ubuntu Precise(12.04)64位使用g(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3如果有帮助的话.所有软件包都是从软件包管理器安装的,并且安装了开发包.

编辑(2017-05-30):标记为https://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries-are-linked-sometimes-cause-errors-in-gcc的副本

其他问题询问为什么参数的顺序很重要.当问到问题时,参数顺序不是一个问题.

此外,之前的问题不包含任何有用的扩展,而这个问题显示了手头的问题.

以前的问题可能被视为对这个问题的答案的有益扩展,但不是重复.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值