目的:在虚拟机中编译arm运行库
目标设备:CPU采用ARM-32架构,操作系统是ubuntu,环境运行库是Arm-gnublf-2014年的。
基于INTER_PC机的inter-32虚拟机环境:
交叉编译工具链:arm-gnublf-2019
1:虚拟机中下载zeroZMQ,使用arm工具链编译。
./configure --host=arm-linux --target=arm-linux prefix=opt/arm-zero
配置成功。继续make&&make install编译成功,
形成libzmq.so。
2.写测试代码:
Service.cpp
#include <stdio.h>
#include <stdlib.h>
It main()
{
rerurn 0;
}
编译链接:
arm-gcc -c service.cpp -I/opt/arm-zero/include -Wl,rpath /opt/depend -L /optarm-zero/lib -lzeromq -oservice
编译成功,将编译的sevice和依赖库放到目标机的opt/depend下,运行直接出现段错误。于是又做了下面试验:
重编译sevice,即将新编译的libzero.so拿掉,不去链接它
arm-gcc -c service.cpp -I/opt/arm-zero/include -Wl,rpath /opt/depend -o service
将新编译service放到目标机上正常运行。
由此可见,我怀疑是程序在启动时加载libzero.so出错了。没有思路了,请各位前辈坛友支招啊。
疑点:
1:因为加载阶段是在main入口前完成的,会是armld.so在目标机和编译机小版本不同吗?如果是这样没有链接libzero.so的程序能正常运行。
2:需要在编译机上回退到arm-gcc2014年版本重新编译吗?
3:主要这个这个没思路,进行不下去了。
求救! |