Stati c компиляция для ARM с потоком - PullRequest
1 голос
/ 07 января 2020

Я недавно начал строить эту библиотеку https://github.com/FreeOpcUa/freeopcua статически для ARM. Мне удалось построить его для X84 статически, используя GNU, но когда я меняю набор инструментов на arm- linux -gnueabihf, я получаю ошибки при связывании исполняемого файла.

Ошибка указывает c на pthread. Я читал, что добавление -pthread поможет, но это уже так, поскольку файлы CMake идентичны, отличается только компилятор.

Я выбираю go stati c, так как меня интересует развертывание одного двоичного файла на beaglebone.

Я надеюсь, что кто-то здесь может указать на эту проблему.

Это будет ошибка, возникшая при связывании сервера example_server:

[100%] Linking CXX executable bin/example_server
/usr/bin/cmake -E cmake_link_script CMakeFiles/example_server.dir/link.txt --verbose=1
/usr/bin/arm-linux-gnueabihf-g++ -std=c++11 -Wall -fPIC -Wall -ggdb -O0 -g -static -rdynamic CMakeFiles/example_server.dir/src/examples/example_server.cpp.o -o bin/example_server -L/home/bas/boost_1_56_0/stage/lib -Wl,-rpath,/home/bas/boost_1_56_0/stage/lib -lpthread -ldl lib/libopcuaprotocol.a lib/libopcuacore.a lib/libopcuaserver.a lib/libopcuacore.a lib/libopcuaprotocol.a -lpthread -ldl /home/bas/boost_1_56_0/stage/lib/libboost_program_options.a /home/bas/boost_1_56_0/stage/lib/libboost_thread.a /home/bas/boost_1_56_0/stage/lib/libboost_filesystem.a -static /home/bas/boost_1_56_0/stage/lib/libboost_system.a
lib/libopcuacore.a(dynamic_library_lin.cpp.o): In function std::operator&(std::_Ios_Fmtflags, std::_Ios_Fmtflags)': /home/bas/boost_1_56_0/boost/format/parsing.hpp:123: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /home/bas/boost_1_56_0/stage/lib/libboost_thread.a(thread.o): In function boost::thread::start_thread_noexcept(boost::thread_attributes const&)':
thread.cpp:(.text+0x3d4): undefined reference to pthread_attr_getdetachstate' /home/bas/boost_1_56_0/stage/lib/libboost_thread.a(thread.o): In function boost::thread::detach()':
thread.cpp:(.text+0xaa4): undefined reference to pthread_detach' /home/bas/boost_1_56_0/stage/lib/libboost_thread.a(thread.o): In function boost::thread::join_noexcept()':
thread.cpp:(.text+0xd76): undefined reference to pthread_join' /home/bas/boost_1_56_0/stage/lib/libboost_thread.a(thread.o): In function boost::thread::do_try_join_until_noexcept(timespec const&, bool&)':
thread.cpp:(.text+0xeb0): undefined reference to pthread_join' /usr/lib/gcc-cross/arm-linux-gnueabihf/7/libstdc++.a(thread.o): In function std::thread::join()':
(.text._ZNSt6thread4joinEv+0xa): undefined reference to pthread_join' /usr/lib/gcc-cross/arm-linux-gnueabihf/7/libstdc++.a(thread.o): In function std::thread::detach()':
(.text._ZNSt6thread6detachEv+0x8): undefined reference to `pthread_detach'
collect2: error: ld returned 1 exit status
CMakeFiles/example_server.dir/build.make:106: recipe for target 'bin/example_server' failed
make[2]: *** [bin/example_server] Error 1
make[2]: Leaving directory '/home/bas/freeopcua/build'
CMakeFiles/Makefile2:261: recipe for target 'CMakeFiles/example_server.dir/all' failed
make[1]: *** [CMakeFiles/example_server.dir/all] Error 2
make[1]: Leaving directory '/home/bas/freeopcua/build'
Makefile:154: recipe for target 'all' failed
make: *** [all] Error 2

Модифицированный CMakeList.txt использует: https://github.com/basb227/freeopcua/blob/master/CMakeLists.txt

Команда, которую я запускаю:

cmake .. -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" -DCMAKE_EXE_LINKER_FLAGS="-static" -DSSL_SUPPORT_MBEDTLS=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_CLIENT=ON -DBUILD_SERVER=ON -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_C_COMPILER=/usr/bin/arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=/usr/bin/arm-linux-gnueabihf-g++ -DBOOST_ROOT=/home/vscode/arm/boost_1_56_0 && make

Boost 1.56 статически собран с той же цепочкой инструментов. У gnu есть успешное соединение, почему нет цепочки инструментов arm?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...