大家可能有过这样的问题,有时候可能需要移植一些库源码交叉编译出arm架构的库,会出现库链接失败,这是为啥呢?
1,一般大家可能都是在windous下的虚拟机中去编译,源码的目录可能在共享文件夹下,我理解共享文件夹是挂载在fuse.vmhgfs-fuse系统,该系统是不支持符号链接的。
解决该问题,只需要把源码放在其他目录即可,如/opt/下。
下面拿我自己举个例子,我要在Linux arm 架构下搭建一个SSH服务器,所以需要移植libssh库来实现,而libssh库又需要zlib 库,所以我需要交叉编译出zlib 库。
步骤:
下载:
也可手动下载。
wget https://github.com/madler/zlib/archive/refs/tags/v1.2.11.tar.gz
配置:
cmake -DCMAKE_INSTALL_PREFIX=/opt/zlib/lib_output/
-DCMAKE_SYSTEM_NAME=Linux
-DCMAKE_C_COMPILER=/opt/cross_chain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
-DCMAKE_CXX_COMPILER=/opt/cross_chain/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
-DZLIB_LIBRARY=/opt/zlib/lib_output/zlib/lib/libz.a
-DZLIB_INCLUDE_DIR=/opt/zlib/lib_output/zlib/include
…
编译:
报错的时候注意看路径在共享文件夹下:
root@jxh-virtual-machine:/mnt/hgfs/work/23-ssh_server/lib_source/zlib-1.2.11/build# make
[ 2%] Building C object CMakeFiles/zlib.dir/adler32.o
[ 5%] Building C object CMakeFiles/zlib.dir/compress.o
[ 7%] Building C object CMakeFiles/zlib.dir/crc32.o
[ 10%] Building C object CMakeFiles/zlib.dir/deflate.o
[ 12%] Building C object CMakeFiles/zlib.dir/gzclose.o
[ 15%] Building C object CMakeFiles/zlib.dir/gzlib.o
[ 17%] Building C object CMakeFiles/zlib.dir/gzread.o
[ 20%] Building C object CMakeFiles/zlib.dir/gzwrite.o
[ 22%] Building C object CMakeFiles/zlib.dir/inflate.o
[ 25%] Building C object CMakeFiles/zlib.dir/infback.o
[ 27%] Building C object CMakeFiles/zlib.dir/inftrees.o
[ 30%] Building C object CMakeFiles/zlib.dir/inffast.o
[ 32%] Building C object CMakeFiles/zlib.dir/trees.o
[ 35%] Building C object CMakeFiles/zlib.dir/uncompr.o
[ 37%] Building C object CMakeFiles/zlib.dir/zutil.o
[ 40%] Linking C shared library libz.so
CMake Error: failed to create symbolic link ‘libz.so.1’: Operation not supported
CMake Error: cmake_symlink_library: System Error: Operation not supported
CMake Error: failed to create symbolic link ‘libz.so’: Operation not supported
CMake Error: cmake_symlink_library: System Error: Operation not supported
make[2]: *** [CMakeFiles/zlib.dir/build.make:322: libz.so.1.2.11] Error 1
make[2]: *** Deleting file ‘libz.so.1.2.11’
make[1]: *** [CMakeFiles/Makefile2:93: CMakeFiles/zlib.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
解决:
把源码移入/opt/下编译:
root@jxh-virtual-machine:/opt/zlib/zlib-1.2.11/build# cmake -DCMAKE_INSTALL_PREFIX=/opt/zlib/lib_output/
-DCMAKE_SYSTEM_NAME=Linu