我在Docker中运行Ubuntu 18:04 x86_64。我已经复制和采购了我用Yocto制作的SDK。
source /sdk/environment-setup-aarch64-poky-linux
我正在编译库
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build .
到目前为止一切都很好,当我检查库架构file myLib.so
时,它显示为aarch64
myLib.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=5e01090be56b47a2dd2edd7c44e9861709f3090a, with debug_info, not stripped
现在我想使用cpack -G "RPM"
-- Toolchain file defaulted to '/sdk/sysroots/x86_64-pokysdk-linux/usr/share/cmake/OEToolchainConfig.cmake'
CPack: Create package using RPM
CPack: Install projects
CPack: - Run preinstall target for: myLib
CPack: - Install project: myLib
CPack: Create package
-- CPackRPM:Debug: Using CPACK_RPM_ROOTDIR=/myLib/build/_CPack_Packages/Linux/RPM
CPackRPM: Will use GENERATED spec file: /myLib/build/_CPack_Packages/Linux/RPM/SPECS/myLib.spec
CPack: - package: /myLib/build/myLib.rpm generated.
当我用rpm -qi myLib.so
检查rpm文件时,结果是
Name : myLib
Version : 1.1.1
Release : 1
Architecture: x86_64
...
为什么RPM文件的架构是x86_64?
为了生成aarch64 RPM文件,我缺少了什么?
变量CPACK_RPM_PACKAGE_ARCHITECTURE默认为uname -m
,当前设置为计算机的体系结构。您可以手动设置此变量以覆盖包架构。
CPACK_RPM_PACKAGE_ARCHITECTURE=aarch64 cpack -G "RPM"