交叉编译出现“non-dynamic relocations refer to dynamic symbol”错误

JustYan 2011-09-13 04:28:36
问题大致上是这样的:
我现在有一个静态库,一段代码中引用到了静态库中的函数,然后这段代码编译成动态库。但编译动态库时遇到以下错误:
mipsel-linux-uclibc/bin/ld: non-dynamic relocations refer to dynamic symbol strcpy
mipsel-linux-uclibc/bin/ld: failed to set dynamic section sizes: Bad value

具体情况如下:
我的项目中使用到了libupnp,之前一直是使用动态库的版本,我们自己的代码也是编译成动态库的,运行一切正常。现在因为某些原因的限制,只能加载我们的项目生成的动态库,不能加载额外的库,所以我想把libupnp编译成静态库,静态链接到我们的动态库中。从libupnp的readme中来看,这个库是可以编译成静态库的。
我在PC平台的Linux上试了一下这种方式,编译链接也没有问题。但我们的运行环境是一个嵌入式的Linux,使用BCM7405平台。使用这个平台提供的交叉编译器来编译,就出现了上面描述的那个错误。
我写了一些测试代码,使用上述方式,也就是动态库链接静态库,用我们的交叉编译器编译,编译运行也没有问题。

所以现在看来很有可能是在我们的平台上将libupnp编译成静态库的过程中出现了问题。libupnp的configuration和makefile较为复杂,我在研究,但暂时还没什么头绪。

所以想请问一下各位,针对上面的错误,有没有人能给我一些解决的思路?
...全文
508 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
warrenbearfen 2012-08-24
  • 打赏
  • 举报
回复
我在交叉编译firefox,辛辛苦苦编译了一堆的依赖库,最后make firefox的时候也出想了类似的错误。不知道有谁后来解决这个问题了吗?
求指导!
sinkay 2012-05-14
  • 打赏
  • 举报
回复
please add -fpic options.
yuzexi2009 2011-11-12
  • 打赏
  • 举报
回复
non-dynamic relocations refer to dynamic symbol strcpy
也是在BCM7405平台下编译的问题,所有库都编译好了,到了最后来了这么一招,hold不住啊
谁知道怎么解决啊
/opt/bcm7405/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/bin/ld: non-dynamic relocations refer to dynamic symbol bind
/opt/bcm7405/bin/../lib/gcc/mipsel-linux-uclibc/4.2.0/../../../../mipsel-linux-uclibc/bin/ld: failed to set dynamic section sizes: Bad value
sonicx24 2011-09-29
  • 打赏
  • 举报
回复
楼主反正你分留着没用
不如给我吧
我把JSONCPP编译成静态库这么搞也出现相同的错误
JustYan 2011-09-22
  • 打赏
  • 举报
回复
好几天了,一直没有答案,我这边也一直没有解决。。。

看来要结贴了。。
JustYan 2011-09-19
  • 打赏
  • 举报
回复
一直没有结果,看来我又要无满意结贴了。。。
JustYan 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangzaiwei2006 的回复:]

strcpy 不是标准库函数里的么?
是不是因为你的这个libupnp中使用了这个strcpy 呢?
我怀疑之前因为你的libupnp是动态库,所以使用动态c库中的strcpy 没什么问题
现在你把他改成了静态库,那么在链接的时候参数选项也一定发生变化了吧?是不是忘记动态链接c库了?或者干脆你们c库也是静态的,但是却使用了动态链接c库的选项?
[/Quote]

libupnp的库中肯定用到了strcpy,不过编译器会自动连接C的标准库,这个应该不用我们操心吧?
JustYan 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 woshi_ziyu 的回复:]

引用 6 楼 justyan 的回复:

一直没有结果,看来我又要无满意结贴了。。。

在哪部分用到了这个动态库呢.

或许是调用的方法有问题呢
[/Quote]

我们的代码中使用到了libupnp的函数,就是包含头文件然后直接调用函数的那种方式。之前是使用编译成动态库的libupnp,现在我想使用静态库的版本,就出现了上面我讲的问题。
这个地方应该与具体的调用方式无关吧?我自己写的试验代码中,调用动态库和静态库都是这么调用的啊。
半字节 2011-09-19
  • 打赏
  • 举报
回复
strcpy 不是标准库函数里的么?
是不是因为你的这个libupnp中使用了这个strcpy 呢?
我怀疑之前因为你的libupnp是动态库,所以使用动态c库中的strcpy 没什么问题
现在你把他改成了静态库,那么在链接的时候参数选项也一定发生变化了吧?是不是忘记动态链接c库了?或者干脆你们c库也是静态的,但是却使用了动态链接c库的选项?
woshi_ziyu 2011-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 justyan 的回复:]

一直没有结果,看来我又要无满意结贴了。。。
[/Quote]
在哪部分用到了这个动态库呢.

或许是调用的方法有问题呢
JustYan 2011-09-16
  • 打赏
  • 举报
回复
还有哪位同学能给点支持啊。。。问题还没解决。。。
JustYan 2011-09-14
  • 打赏
  • 举报
回复
这个库本身应该没有问题,我用同一份代码编译出的动态库,编译运行一切正常。现在因为项目中的一些限制,只能静态链接,编译出的静态库使用就有问题了。
我怀疑是编译过程中有问题,不一定是错误,有可能存在某些需要特别配置的地方。但我现在没什么头绪,所以希望大家能给我一些继续查找问题的思路。
woshi_ziyu 2011-09-14
  • 打赏
  • 举报
回复

这个库会有问题吗?
[Quote=引用 2 楼 justyan 的回复:]

本身libupnp的编译过程没有问题,我查看了一下编译的输出日志,也没有看出什么明显的问题。
另外我自己的代码的编译过程没有问题,只是在最后链接这个库的时候报错,在上面写的这个错误之前没有其他的错误日志,都是正常的编译链接日志。
[/Quote]
JustYan 2011-09-14
  • 打赏
  • 举报
回复
本身libupnp的编译过程没有问题,我查看了一下编译的输出日志,也没有看出什么明显的问题。
另外我自己的代码的编译过程没有问题,只是在最后链接这个库的时候报错,在上面写的这个错误之前没有其他的错误日志,都是正常的编译链接日志。
woshi_ziyu 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 justyan 的回复:]
问题大致上是这样的:
我现在有一个静态库,一段代码中引用到了静态库中的函数,然后这段代码编译成动态库。但编译动态库时遇到以下错误:
mipsel-linux-uclibc/bin/ld: non-dynamic relocations refer to dynamic symbol strcpy
mipsel-linux-uclibc/bin/ld: failed to set dynami……
[/Quote]
看样子很复杂

也只能看他编译的记录了

2,426

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 其他硬件开发
社区管理员
  • 其他硬件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧