Paho C(ARM)的交叉编译问题



我需要帮助,因为我试图为我的arm设备交叉编译c中的paho库。

我使用的是ubuntu 20.04虚拟机,我的交叉编译器是gcc-linaro-5.3-2016.02-x86_64_arm-linux-gneabihf_5.3_sub1.0.3.tgz。以下是不同的步骤。

git clone https://github.com/eclipse/paho.mqtt.c.git
sudo apt-get update
sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui
sudo apt-get install fakeroot fakeroot devscripts dh-make lsb-release
sudo apt-get install libssl-dev 
sudo apt-get install doxygen graphviz
mkdir build.paho
cd build.paho

我创建了一个文件";linaro.cmake";在paho项目的cmake文件夹中

# specify the cross compiler
SET(CMAKE_C_COMPILER    /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER  /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_STRIP /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip)
#SET(OPENSSL_LIB_SEARCH_PATH opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib)
#SET(OPENSSL_INC_SEARCH_PATH opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/openssl)
#SET(OPENSSL_SEARCH_PATH "/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib;/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin/")
SET(OPENSSL_ROOT_DIR /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin)
SET(OPENSSL_LIBRARIES /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib)
#SET(OPENSSL_LIBRARIES /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/openssl)
SET(OPENSSL_INCLUDE_DIR /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/openssl)
SET(OPENSSL_CRYPTO_LIBRARY /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/openssl/libcrypto.so)
SET(OPENSSL_SSL_LIBRARY /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/lib/libssl.so)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_SYSTEM_VERSION 1)

我的问题是,当我启动命令时

cmake 
-GNinja 
-DPAHO_WITH_SSL=TRUE 
-DPAHO_BUILD_SAMPLES=TRUE 
-DPAHO_BUILD_DOCUMENTATION=TRUE 
-DCMAKE_TOOLCHAIN_FILE=../cmake/linaro.cmake ..

我有多个类似的警告

-C编译器标识为GNU 5.3.1--检查C编译器是否正常工作:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-GNUabihf-gcc--检查C编译器是否正常工作:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-GNUabihf-gcc--作品--检测C编译器ABI信息--检测C编译器ABI信息-已完成--检测C编译功能--检测C编译功能-已完成--CMake版本:3.16.3--CMake系统名称:Linux--时间戳为2021-05-04T12:39:01Z--已找到OpenSSL:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin/libcrypto.so

--在src/CMakeLists.txt:200(ADD_LIBRARY)配置done CMake Warning(dev):未设置策略CMP0028:目标中的双冒号name表示ALIAS或IMPORTED目标。运行";cmake—帮助策略CMP0028";有关策略详细信息。使用cmake_policy命令设置策略并取消显示此警告。

目标";paho-mqt3cs";链接到目标";OpenSSL::Crypto";但是找不到目标。可能缺少的find_package()调用IMPORTED目标或ALIAS目标丢失?此警告是为项目开发人员。使用-Wno-dev来抑制它。

src/CMakeLists.txt:201(ADD_LIBRARY)上的CMake警告(dev):策略未设置CMP0028:目标名称中的双冒号表示ALIAS或
IMPORTED目标。运行";cmake——帮助策略CMP0028";用于策略详细信息。使用cmake_policy命令设置策略并取消显示这个警告。

目标";paho-mqt3as";链接到目标";OpenSSL::Crypto";但是找不到目标。可能缺少的find_package()调用IMPORTED目标或ALIAS目标丢失?此警告是为项目开发人员。使用-Wno-dev来抑制它。

src/CMakeLists.txt:332(ADD_EXECUTABLE)处的CMake警告(dev):
未设置策略CMP0028:目标名称中的双冒号表示ALIAS或导入的目标。运行";cmake——帮助策略CMP0028";用于策略详细信息。使用cmake_policy命令设置策略并取消显示这个警告。

目标";Sha1TestOpenSSL";链接到目标";OpenSSL::Crypto";但是找不到目标。可能缺少的find_package()调用IMPORTED目标或ALIAS目标丢失?此警告是为项目开发人员。使用-Wno-dev来抑制它。

src/CMakeLists.txt:323(ADD_EXECUTABLE)处的CMake警告(dev):
未设置策略CMP0028:目标名称中的双冒号表示ALIAS或导入的目标。运行";cmake——帮助策略CMP0028";用于策略详细信息。使用cmake_policy命令设置策略并取消显示这个警告。

目标";Base64TestOpenSSL";链接到目标";OpenSSL::Crypto";但是找不到目标。可能缺少的find_package()调用IMPORTED目标或ALIAS目标丢失?此警告是为项目开发人员。使用-Wno-dev来抑制它。

测试/CMakeLists.txt:516(ADD_EXECUTABLE)时的CMake警告(dev):
未设置策略CMP0028:目标名称中的双冒号表示ALIAS或导入的目标。运行";cmake——帮助策略CMP0028";用于策略详细信息。使用cmake_policy命令设置策略并取消显示这个警告。

目标";test3";链接到目标";OpenSSL::Crypto";但目标是找不到。IMPORTED可能缺少find_package()调用目标,或者缺少ALIAS目标?此警告适用于项目开发人员。使用-Wno-dev来抑制它。

test/CMakeLists.txt:1122(ADD_EXECUTABLE)处的CMake警告(dev):
未设置策略CMP0028:目标名称中的双冒号表示ALIAS或导入的目标。运行";cmake——帮助策略CMP0028";用于策略详细信息。使用cmake_policy命令设置策略并取消显示这个警告。

目标";test5";链接到目标";OpenSSL::Crypto";但目标是找不到。IMPORTED可能缺少find_package()调用目标,或者缺少ALIAS目标?此警告适用于项目开发人员。使用-Wno-dev来抑制它。

--生成已完成--生成文件已写入:/home/myhome/Documents/paho.mqtt.c/Build.paho

当我尝试启动忍者包时

[9/50]链接C共享库src/libpaho-mqt3cs.so.1.8失败:src/libpaho-mqtt3cs.so.1.3.8:&/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc-fPIC-Wl,-init,MQTTClient_init-shared-Wl,-soname,libpaho-mqtt3cs.so.1-o src/libpaho-mqtt3cs.to.1.3.8 src/CMakeFiles/common_sl_obj.dir/MQTTime.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTProtocolClient.c-osrc/CMakeFiles/common_ssl_obj.dir/Clients.c-osrc/CMakeFiles/common_ssl_obj.dir/utf-8.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTPacket.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTPackageOut.c-osrc/CMakeFiles/common_ssl_obj.dir/Messages.c-osrc/CMakeFiles/common_ssl_obj.dir/Tree.c-osrc/CMakeFiles/common_ssl_obj.dir/Socket.c-osrc/CMakeFiles/common_ssl_obj.dir/Log.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTPersistence.c-osrc/CMakeFiles/common_ssl_obj.dir/Thread.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTProtocolOut.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTPersistenceDefault.c.osrc/CMakeFiles/common_ssl_obj.dir/SocketBuffer.c-osrc/CMakeFiles/common_ssl_obj.dir/LinkedList.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTProperty.c-osrc/CMakeFiles/common_ssl_obj.dir/MQTreasonCodes.cosrc/CMakeFiles/common_ssl_obj.dir/Base64.c.osrc/CMakeFiles/common_ssl_obj.dir/SHA1.c.osrc/CMakeFiles/common_ssl_obj.dir/WebSocket.c-osrc/CMakeFiles/common_ssl_obj.dir/StackTrace.c-osrc/CMakeFiles/common_ssl_obj.dirHeap.c.osrc/CMakeFiles/paho-mqtt3cs.dir/MQTClient.c-osrc/CMakeFiles/paho-mqt3cs.dir/SSLSocket.c-o/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabi-hf/libc/usr/lib/libssl.so-lOpenSSL::Crypto-lc-ldl-lpthread-lrt&:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin//lib/gcc/arm-linux-gnueabihf/5.3.1/../../../arm-linux-GNUabihf/bin/ld:ne peut trouver-lOpenSSL::Crypto collect2:错误:ld返回1个出口status[11/50]Building C对象src/CMakeFiles/paho-mqt3as.dir/SSLSocket.c.oninja:构建已停止:子命令失败。

有人知道吗?

对我来说奇怪的是这句话--找到了OpenSSL:/opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin/libcrypto.so,即使我指示了另一个位置。

提前感谢

使用新编译器gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.解决

最新更新