赞
踩
使用makefile编译时报了下面的错误,看起来是使用的ffmpeg库导致的,这个工程是之前别人写的,不可能git上传不能编译的工程吧,怀疑是自己拷贝过来的库有问题,从其他工程拷贝这个工程需要的库,还是报错,纳尼??
/usr/bin/ld: ./comlib/ffmpeg/lib/libavcodec.a(allcodecs.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
./comlib/ffmpeg/lib/libavcodec.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
Makefile:57: recipe for target 'libDecoderFFMPEGLive.so.1.0.0.7' failed
make: *** [libDecoderFFMPEGLive.so.1.0.0.7] Error 1
再网上找了一圈,说是
1、编译参数要加-fPIC,但实际上makefile已经加了
2、又尝试去掉-lz -ldl等选项(无能狂试),还是不行
3、网上说如果你的makefile很大,CFLAGS也不明确,那就在配置时手动加上,即:
$CFLAGS="-fPIC" ./configure ..............
如果这样还不行,你需要试一下sudo,即:
$sudo CFLAGS="-fPIC" ./configure ..............
一想ffmpeg和boost编译时都没加上这个,报着试一试的心态加了,然后就编译通过了,纳尼?越来越晕了,为什么其他工程的ffmpeg库不需要加这个,越来越晕了,先记录下,等我知道为什么了,再在下面记录原因(挖坑)
填坑:
1、加了-fPIC选项就表明编译生成的.o文件是位置无关的
2、如果编译静态库时没有加-fPIC选项,则静态库中的.o文件是位置有关的
3、当一个动态库中需要包含此静态库时,将静态库中的.o文件包含进动态库,重新链接时就会报错
解决办法:将需要被动态库包含的静态库在编译时加上-fPIC选项,这样就不会报错误了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。