ubuntu下链接so动态库时,报错:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginT.o: relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
src/YouMeIMEngine/CMakeFiles/yim.dir/build.make:1212: recipe for target '../lib/LINUX/Debug/xxx.so' failed
make[2]: *** [../lib/LINUX/Debug/xxx.so] Error 1
CMakeFiles/Makefile2:85: recipe for target 'src/xxxxx/CMakeFiles/xxx.dir/all' failed
make[1]: *** [src/xxxxxx/CMakeFiles/xxx.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
网上很多说,
1. 要加-fpic。然而,我却没有因此而解决。
2.Makefile中的空格不对。然而,我还是没有解决。
提供一个解题思路:
1. 对编译脚本做删减,缩小范围;
2. 能否找到一个近期OK的类似项目;
3. 移动一些依赖库,看so是链接什么库时,出现的报错。
我是用第三种方式,发现链接一个静态库时,加入了-static,去掉就好了。
问题的方式:
TARGET_LINK_LIBRARIES (myobj mylib -static z )
修改为:
TARGET_LINK_LIBRARIES (myobj mylib z )
这种问题比较难搞,就是考验你的运气和耐心。