跪求cmake交叉编译出错原因!!!

Linking CXX shared library ../../lib/libopencv_core.so
/opt/EmbedSky/4.4.6/lib/gcc/arm-embedsky-linux-gnueabi/4.4.6/../../../../arm-embedsky-linux-gnueabi/bin/ld: ../../3rdparty/lib/libzlib.a(inflate.c.obj): relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../../3rdparty/lib/libzlib.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_core.so] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 错误 2
make: *** [all] 错误 2
请问这是什么错误啊?
opencv路径及版本:/usr/local/ Opencv2.4.1
cmake路径及版本:/usr/local/ cmake-2.8.12.2-Linux-i386
用户:root

2个回答

                进入opencv目录下的3rdparty的对应目录CMakeFiles/ *.dir下,打开flags.make,在C_FLAGS = 后添加-O3 -fPIC用来支持在64位机上编译
                如../3rdparty/zlib/CMakeFiles/zlib.dir/flags.make
                修改C_FLAGS =  -W -Wall 为 C_FLAGS =  -O3 -fPIC  -W -Wall
                和
                修改CXX_FLAGS =  -W -Wall 为 C_FLAGS =  -O3 -fPIC  -W -Wall
Julialove102123
女王の专属领地 cannt find the route?what wrong?
接近 3 年之前 回复

楼上的回答是正确的,我按照此方法解决了和题主同样的问题。3rdparty这个目录是在你指定的二进制文件输出目录下面。这个二进制文件输出目录就是你在CMake中指定的where to build the binaries 目录。

wgf5845201314
老张谋 你解决了吗?我也是这个问题,我在笔记本,ubuntu 下装的opencv
一年多之前 回复
whenicry
MLFRE 你好,请问我的opencv中3rdparty下的zlib文件夹中并没有CMakeFiles这个文件夹啊,能麻烦你再详述一下吗?感谢。ps:我装的是opencv3.3.0
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问