交叉编译在进行到链接环节时出现找不到库文件的错误,如下:
一般来说,链接时出现库查找不到则需要将库路径添加到link_directories或者target_link_directories, 这里说查找不到libblas.so.3和liblapack.so.3,那么查找这两个库的路径后发现,这个库路径是实实在在的添加到了link_directories中的,那么为什么依然找不到这个库呢?
那么接下来可以怀疑这个库是否损坏或者没有权限,因此,进入到这个库路径下,使用ls -l libblas.so.3, 发现权限没问题,然后我想检查这个库文件的实际内容,与是使用readelf命令:
结果显示没有这个文件,这个就很奇怪,明明文件是存在的,而且也具备权限,为什么这个库就没内容呢?
与是使用file命令检查文件的具体格式信息:
出现了 broken symbolic link to /etc/alternatives/libblas.so-aarch64-linux-gnu, 一个被破坏的链接符号,原来这仅仅是个链接符号而不是库文件实体,其链接的对象是/etc/alternatives/libblas.so.3-aarch64-linux-gnu,这个实际指的是ARM系统中的路径,而我并没有将这个目录从ARM系统中拷贝到X86主机中来,因此这个符号链接自然就没法使用了。
同时,虽然符号链接指向了/etc/alternatives/libblas.so.3-aarch64-linux-gnu,但是不能代表/etc/alternatives/libblas.so.3-aarch64-linux-gnu就是真正的库文件,它依然可能是个符号链接,因此远程登陆到ARM系统中使用file命令进行检查(readlink命令也可以),结果如下:
果然,这个玩意也是一个指向/usr/lib/aarch64-linux-gnu/atlas/libblas.so的符号链接,同样检查/usr/lib/aarch64-linux-gnu/atlas/libblas.so的类型:可以看到它指向的是同目录下的libblas.so.3.10.3,因此实际我们需要的库文件就在/usr/lib/aarch64-linux-gnu/atlas中。
将这个路径添加到link_directories,编译顺利完成。