如何解决 error adding symbols: Bad value 问题
2017-01-21 15:27
537 查看
//by sven
最近遇到一个关于动态库和静态库使用的一个问题。
我们都知道在生成一个动态库时需要指定-fPIC,这是创建动态库所要求的,共享库被加载是在内存中的位置是不固定的,是一个相对的位置。
那么在生成静态库时通常不指定-fPIC, 可是在64bit编译使用静态库就会提示需要-fPIC从新编译该库:
/opt/mipsel-openwrt-linux-4.8.3/mipsel-4.8.4/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/../lib/gcc/mipsel-openwrt-linux-uclibc/4.8.3/../../../../mipsel-openwrt-linux-uclibc/bin/ld: ../lib/libmad.a(stream.o):relocation
R_MIPS_26 against `mad_bit_init' can not be used when making a shared object; recompile with -fPIC
../lib/libmad.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libavio.so] Error 1
原因就是由于libmad编译静态库时,没有使用-fPIC选项,使得编译出来的静态库没有重定位能力。这样在64bit机器上编译出来的静态库如果不指定-fPIC选项几乎全部不能使用。
因此需要重新加上-fPIC从新编译libmad
这样就可以使用该静态库了,使用其他库类似问题同样适用。
最近遇到一个关于动态库和静态库使用的一个问题。
我们都知道在生成一个动态库时需要指定-fPIC,这是创建动态库所要求的,共享库被加载是在内存中的位置是不固定的,是一个相对的位置。
那么在生成静态库时通常不指定-fPIC, 可是在64bit编译使用静态库就会提示需要-fPIC从新编译该库:
/opt/mipsel-openwrt-linux-4.8.3/mipsel-4.8.4/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/../lib/gcc/mipsel-openwrt-linux-uclibc/4.8.3/../../../../mipsel-openwrt-linux-uclibc/bin/ld: ../lib/libmad.a(stream.o):relocation
R_MIPS_26 against `mad_bit_init' can not be used when making a shared object; recompile with -fPIC
../lib/libmad.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libavio.so] Error 1
原因就是由于libmad编译静态库时,没有使用-fPIC选项,使得编译出来的静态库没有重定位能力。这样在64bit机器上编译出来的静态库如果不指定-fPIC选项几乎全部不能使用。
因此需要重新加上-fPIC从新编译libmad
这样就可以使用该静态库了,使用其他库类似问题同样适用。
相关文章推荐
- 如何解决 error adding symbols: Bad value 问题
- 在Linux动态库Project中链接静态库时,遇到error adding symbols: Bad value的问题
- 交叉编译opencv2.4.13出错:libzlib.a: error adding symbols: Bad value
- python安装cryptography 报错: error adding symbols: Bad value
- /usr/local/ssl/lib/libssl.a: error adding symbols: Bad value
- 关于lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch问题解决办法
- 如何解决J2ME开发中遇到提示 ALERT: java/lang/ClassFormatError: Bad version information.的问题?
- 如何解决J2ME开发中遇到提示 ALERT: java/lang/ClassFormatError: Bad version information.的问题
- 如何解决:ERROR: the user data image is used by another emulator. aborting 的问题
- 方法:如何解决NetShareEnum返回ERROR_NO_UNICODE_TRANSLATION(1113)的问题
- 如何解决:ERROR: the user data image is used by another emulator. aborting 的问题
- 解决java.lang.UnsupportedClassVersionError: Bad version number in .class file问题
- 如何解决奔溃问题--SIGABRT和EXC_BAD_ACCESS
- 如何解决:ERROR: the user data image is used by another emulator. aborting 的问题
- 如何解决XCODE中错误: Undefined symbols for architecture i386 error
- IOS如何解决烦人的“clang: error: linker command failed with exit code 1 (use -v to see invocation)”问题
- 如何解决XCODE中错误: Undefined symbols for architecture i386 error
- error: variable missing(use:--variable API_KEY=value)问题的解决
- 如何解决Android中 Error generating final archive: Debug Certificate expired on的问题
- java.lang.UnsupportedClassVersionError: Bad version number in .class file 问题解决办法.