Linux Динамическая сборка CMake c библиотека без привязки зависимостей - PullRequest
0 голосов
/ 04 февраля 2020

Я кодирую библиотеку C ++ на Linux, имя lib - libi c. libi c использовать openssl. Когда я собираю libi c на хосте Ubuntu 18.04, ошибки не возникает. Но когда я кросс-компилирую libi c для arm, ошибка компоновщика при сборке libi c shared target. Ошибка выглядит следующим образом:

....
[100%] Linking CXX shared library libic.so
uclient.c:(.text+0xd96): undefined reference to `event_del'
uclient.c:(.text+0xd9e): undefined reference to `event_free'
uclient.c:(.text+0xdae): undefined reference to `event_del'
uclient.c:(.text+0xdb6): undefined reference to `event_free'
uclient.c:(.text+0xdf8): undefined reference to `SSL_get_shutdown'
uclient.c:(.text+0xe0a): undefined reference to `SSL_free'
uclient.c:(.text+0xe5c): undefined reference to `SSL_free'
uclient.c:(.text+0xe90): undefined reference to `event_base_free'
uclient.c:(.text+0xe98): undefined reference to `pthread_cancel'
uclient.c:(.text+0xed6): undefined reference to `SSL_get_shutdown'
uclient.c:(.text+0xefa): undefined reference to `SSL_set_shutdown'
uclient.c:(.text+0xf06): undefined reference to `SSL_shutdown'
uclient.c:(.text+0xf12): undefined reference to `SSL_set_shutdown'
uclient.c:(.text+0xf1a): undefined reference to `SSL_shutdown'

Журнал конфигурации ниже

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE  
-- Found OpenSSL: /home/drone/tizen-studio/platforms/tizen-3.0/mobile/rootstraps/mobile-3.0-device.core/usr/lib/libcrypto.so (found version "1.0.2k") 
-- Using OpenSSL 1.0.2k
-- Found CURL: /home/drone/tizen-studio/platforms/tizen-3.0/mobile/rootstraps/mobile-3.0-device.core/usr/lib/libcurl.so (found version "7.50.2")
-- 
--   C/C++:
--     C++ Compiler:                /home/drone/Downloads/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-g++ (ver 7.3.1)
--     C++ flags (Release):         -mthumb  -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -std=c++1y -fPIC -O3 -DNDEBUG
--     C++ flags (Debug):           -mthumb  -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -std=c++1y -fPIC -g
--     C Compiler:                  /home/drone/Downloads/gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc
--     C flags (Release):           -mthumb  -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -fPIC -O3 -DNDEBUG
--     C flags (Debug):             -mthumb  -fdata-sections -Wa,--noexecstack -fsigned-char -Wno-psabi -fPIC -g
--   CMAKE_INSTALL_PREFIX:          /home/drake/Documents/code/libscs/packages/libscs
--     Linker flags (Release):      -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now 
--     Linker flags (Debug):        -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now 

Кажется, что при кросс-компиляции libi c требуется для связи с openssl. Я хочу спросить, как я могу создать libi c shared без связи с openssl? Спасибо за вашу поддержку.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

Спасибо, ребята, я нашел ответ, проблема с компоновщиком возникает из-за этого флага компоновщика -Wl, - no-undefined. Просто удалите этот компоновщик, опция OK

0 голосов
/ 04 февраля 2020

Если ваша библиотека зависит от libssl, вы не можете скомпилировать ее без ссылки на libssl. Вы пытались получить пакет libssl для архитектуры arm? С головы до головы, что-то вроде

dpkg --add-architecture arm
apt update
apt install libssl-dev:arm

Или, может быть,

dpkg --add-architecture arm64
apt update
apt install libssl-dev:arm64

Надеюсь, это поможет!

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