交叉编译出现“non-dynamic relocations refer to dynamic symbol”错误
问题大致上是这样的:
我现在有一个静态库,一段代码中引用到了静态库中的函数,然后这段代码编译成动态库。但编译动态库时遇到以下错误:
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较为复杂,我在研究,但暂时还没什么头绪。
所以想请问一下各位,针对上面的错误,有没有人能给我一些解决的思路?