我正在尝试编译一个mex脚本。 我得到的错误是:
ld: selfintersect.o: relocation R_X86_64_32S against
`_ZTVSt15basic_streambufIcSt11char_traitsIcEE' can not be used when making a
shared object; recompile with -fPIC
selfintersect.o: error adding symbols: Bad value
阅读类似问题的答案,我理解这个错误是由于我尝试编译共享对象但在链接中使用静态错误。但是这个错误非常神秘 - 我无法理解哪个是静态对象我应该重新编译为动态对象。以下是mex对gcc的调用:
gcc -c -Isrc -I/usr/local/include/ -I/usr/local/include/eigen3
-I/usr/local/igl/libigl/include
-I/local/apps/linux-2.2-i386/matlab/matlab-8.5.0.197613/extern/include
-DMATLAB_MEX_FILE -std=c++11 -DMEX -DMX_COMPAT_32 -O -DNDEBUG "selfintersect.cpp"
然后链接:
gcc -O -pthread -shared -Wl,
--version-script,/local/apps/linux-2.2-i386/matlab/matlab-8.5.0.197613/extern/lib/glnxa64/mexFunction.map
-Wl,--no-undefined -o "selfintersect.mexa64" selfintersect.o
-L/home/user/mylibs/CGAL-4.6/lib -lCGAL -lCGAL_Core -lgmp -lmpfr
-lboost_thread -lboost_system -Wl,-rpath-link,
/local/apps/linux-2.2-i386/matlab/matlab-8.5.0.197613/bin/glnxa64
-L/local/apps/linux-2.2-i386/matlab/matlab-8.5.0.197613/bin/glnxa64
-lmx -lmex -lmat -lm