在一个项目中,我的同事创建了一个静态库,例如liba.a,它与应用程序链接。如何将libc.a链接到arm-linux中的共享库arm-none-linux-gnueabi-gcc
在liba.a中,他将libc malloc()覆盖为其所有者版本。
我创建了一个共享库libs.so,它也与应用程序链接。
问题是当我的libs.so链接到应用程序时,在我的libs.so中使用的malloc()将成为liba.a中的一个,而不是标准libc.so中的那个,这会导致问题。
然后,我想静态链接libc.a到我的libs.so,我用gcc的-static -shared -fPIC标志。
但我总是得到arm-2012.03/bin /../ lib/gcc/arm-none-linux-gnueabi/4.6.3 /../../../../ arm-none-linux -gnueabi/bin/ld:arm-2012.03/bin /../ arm-none-linux-gnueabi/libc/usr/lib/libc.a(dl-tsd.o)(.text + 0x14):R_ARM_TLS_LE32 relocation not允许共享对象。
有没有人有想法呢?
向前感谢。
我认为-static -share不应该混合使用...... – Jeyaram
下面的文本从codedgery的ld.pdf中拷贝下来:“-static不要链接到共享库,这只对共享的平台 有意义库支持** 选项可与'-shared'**一起使用,这意味着创建了共享库 ,但是必须通过从静态库中提取条目来解析库的所有外部参考文件必须解析为 “。 –
@DavidChyi:这只是说静态和共享可以混合使用,但并不是说这是个好主意。一般而言,编译器有许多选项,这些选项对于普通应用程序来说不是一个好主意。它们对编译内核,引导程序,微控制器代码等特殊情况非常重要。 –