简体   繁体   中英

Problem with cross compilation of Paho C (ARM)

I need help because I try to cross compile the paho library in c for my arm device.

I use an ubuntu 20.04 virtual machine and my cross compiler is gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf_5.3_sub1.0.3.tgz. Here the differents steps.

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

I've created a file "linaro.cmake" in the cmake folder of the paho project

 # 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)

My problem, when I launch the command

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

I have multiple warning like

-- The C compiler identification is GNU 5.3.1 -- Check for working C compiler: /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -- Check for working C compiler: /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- CMake version: 3.16.3 -- CMake system name: Linux -- Timestamp is 2021-05-04T12:39:01Z -- Found OpenSSL: /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin/libcrypto.so

-- Configuring done CMake Warning (dev) at src/CMakeLists.txt:200 (ADD_LIBRARY): Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "paho-mqtt3cs" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) at src/CMakeLists.txt:201 (ADD_LIBRARY): Policy CMP0028 is not set: Double colon in target name means ALIAS or
IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "paho-mqtt3as" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) at src/CMakeLists.txt:332 (ADD_EXECUTABLE):
Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "Sha1TestOpenSSL" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) at src/CMakeLists.txt:323 (ADD_EXECUTABLE):
Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "Base64TestOpenSSL" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) at test/CMakeLists.txt:516 (ADD_EXECUTABLE):
Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "test3" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

CMake Warning (dev) at test/CMakeLists.txt:1122 (ADD_EXECUTABLE):
Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

Target "test5" links to target "OpenSSL::Crypto" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? This warning is for project developers. Use -Wno-dev to suppress it.

-- Generating done -- Build files have been written to: /home/myhome/Documents/paho.mqtt.c/build.paho

And when I try to launch ninja package

[9/50] Linking C shared library src/libpaho-mqtt3cs.so.1.3.8 FAILED: 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.so.1.3.8 src/CMakeFiles/common_ssl_obj.dir/MQTTTime.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTProtocolClient.c.o src/CMakeFiles/common_ssl_obj.dir/Clients.c.o src/CMakeFiles/common_ssl_obj.dir/utf-8.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTPacket.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTPacketOut.c.o src/CMakeFiles/common_ssl_obj.dir/Messages.c.o src/CMakeFiles/common_ssl_obj.dir/Tree.c.o src/CMakeFiles/common_ssl_ob j.dir/Socket.c.o src/CMakeFiles/common_ssl_obj.dir/Log.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTPersistence.c.o src/CMakeFiles/common_ssl_obj.dir/Thread.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTProtocolOut.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTPersistenceDefault.c.o src/CMakeFiles/common_ssl_obj.dir/SocketBuffer.c.o src/CMakeFiles/common_ssl_obj.dir/LinkedList.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTProperties.c.o src/CMakeFiles/common_ssl_obj.dir/MQTTReasonCodes.c.o src/CMakeFiles/common_ssl_obj.dir/Base64.c.o src/CMakeFiles/common_ssl_obj.dir/SHA1.c.o src/CMakeFiles/common_ssl_obj.dir/We bSocket.c.o src/CMakeFiles/common_ssl_obj.dir/StackTrace.c.o src/CMakeFiles/common_ssl_obj.dir/Heap.c.o src/CMakeFiles/paho-mqtt3cs.dir/MQTTClient.c.o src/CMakeFiles/paho-mqtt3cs.dir/SSLSocket.c.o /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/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-gnueabihf/bin/ld : ne peut trouver -lOpenSSL::Crypto collect2: error: ld returned 1 exit status [11/50] Building C object src/CMakeFiles/paho-mqtt3as.dir/SSLSocket.c.o ninja: build stopped: subcommand failed.

Have anybody an idea?

The strange thing for me is this line -- Found OpenSSL: /opt/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/bin/libcrypto.so even if I indicated another location.

Thanks in advance

Resolved with a new compiler gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM