安装环境
PC:Ubuntu
开发板系统:4.1.15 linux
开发板型号:正点原子alpha
交叉编译工具:arm-linux-gnueabihf
参考博客:landuochong
安装准备
gsoap官网 https://sourceforge.net/projects/gsoap2/files/latest/download
博主下了gsoap_2.8.106.zip
拷贝到ubuntu上并解压unzip gsoap_2.8.106.zip
编译安装
备份一份Ubuntu下的后面会用到
cp -rf gsoap-2.8/ gsoap-x86/
mv gsoap-2.8/ gsoap-arm
编译Ubuntu下的gsoap
cd gsoap-x86
./configure
make
make install
回到原先的目录进入另一份准备移植的目录
cd gsoap-arm
配置生成的目录,交叉编译环境
./configure --prefix=$PWD/install --host=arm-linux-gnueabihf CXX=arm-linux-gnueabihf-g++ CC=arm-linux-gnueabihf-gcc --disable-ssl
修改config.h
屏蔽#define malloc rpl_malloc
将#define HAVE_MALLOC 0 更改为:#define HAVE_MALLOC 1
编译 make
此次make会提示错误 /bin/bash: ../../gsoap/src/soapcpp2: cannot execute binary file: 可执行文件格式错误
因为是arm版本,在Ubuntu上是不可执行。进入gsoap/src目录确认生成的soapcpp2是否为arm版本
file soapcpp2
将该soapcpp2备份
mv soapcpp2 soapcpp2-arm
将gsoap-x86/gsoap/src目录下的soapcpp2拷贝到gsoap-arm/gsoap/src目录下
cp gsoap-x86/gsoap/src/soapcpp2 gsoap-arm/gsoap/src/
回到gsoap-arm/目录编译,此次编译无任何错误提示
make
进入gsoap-arm/gsoap/src/目录,将x86拷贝来的soapcpp2删除,将前面备份的soapcpp2-arm重命名soapcpp2
mv soapcpp2-arm soapcpp2
在当前目录下重新make
回到gsoap-arm目录进行安装 make install
安装完成后对应的安装目录下会生成bin include lib share 四个文件夹
将其拷贝到arm开发板上
soapapp2 -v
wsdl2h -v
进行验证
问题记录
wsdl2h: /lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by wsdl2h)
编译生成的执行文件在arm上缺少相关库
https://www.pianshen.com/article/1615164190/
下载libstdc++6-6-dbg_6.3.0-18+deb9u1_armhf.deb(libstdc++6…-dbg_..._armhf.deb)
拷贝到Ubuntu下解压
dpkg -X ./libstdc++6-6-dbg_6.3.0-18+deb9u1_armhf.deb libstdc++6
cd libstdc++6/usr/lib/arm-linux-gnueabihf/debug
将libstdc++.so.6.0.22 拷贝到arm的lib目录下
删除原先的libstdc++.so.6
重新连接 ln -s libstdc++.so.6.0.22 libstdc++.so.6