前言:
要做一个arm架构的镜像,因为arm机器资源有限,编译程序比较慢,也增加考代码繁琐步骤。所以要制作一个交叉编译环境在本地直接编译程序。先让大神给我下载了纯净的对应机器的x86镜像,然后开始我的移植编译库之旅。
遇到问题:
-
No rule to make target '/usr/lib/aarch64-linux-gnu/libbz2.so'
查看这个库的信息,这个库指向了系统库路径文件,再把系统库也从arm机器中copy过来即可
-
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
直接apt-get install安装。 工具直接安装,编译库需要从arm架构下copy。
-
Target "eq-map_service" links to target "AWS::crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing?
通过各种折腾最终发现在arm设备里面编译
在镜像里面编译
两者链接的库的目录不对。在根据线索查询,发现干了一件很蠢的事,把lib/aarch64-linux-gnu 复制到/usr/local/lib里面去了。
-
能编译过,运行时报了这个错:symbol lookup error: ./xxx: undefined symbol: _ZNK3Aws5Utils6Stream14ResponseStream19GetUnderlyingStreamEv
从报错中看跟aws有关,然后分析aws库。发现aws库之前复制到镜像了,在开发过程中,aws库版本有问题,更新了aws版本,没有替换到镜像里面,更新到镜像后,正常运行。