Как заставить CMake / G ++ / LD связать общий объект с другим общим объектом - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно создать общий объект (.so), который связан с другим общим объектом (мой код использует функции / символы, экспортированные этим общим объектом). Что бы я ни пытался, CMake / G ++ / LD отказывается включать общий объект в операцию компоновки.

В частности, я реализую тип таблицы OEM для движка MariaDB CONNECT. Я попытался использовать эти директивы CMake и сопровождающие их директивы с нулевым успехом:

link_directories()
add_library()
find_library()
target_link_libraries()

Я в полной растерянности. Мой код компилирует , и в зависимости от настроек появляется для ссылки, но всегда пропускает зависимость ha_connect.so при проверке и, следовательно, выдает неопределенный символ ошибки при загрузке.

Я уже пытался заручиться поддержкой Оливье Бертран (сопровождающий CONNECT). Код, о котором идет речь, по-видимому, компилируется, связывается и выполняется без проблем в Windows, что несколько затрудняет его понимание того, что препятствует связыванию в Linux.

Мой текущий CMakeLists.txt, который компилирует и связывает без ошибок при ссылках, выглядит так:

cmake_minimum_required(VERSION 3.10)

project(data_flex VERSION 0.9 DESCRIPTION "DataFlex lib for Maria Connect")
include(GNUInstallDirs)

file(GLOB_RECURSE sources      src/*.cpp include/*.h)

add_library(data_flex SHARED ${sources})
target_include_directories(data_flex PRIVATE include)

set_target_properties(data_flex PROPERTIES
    VERSION ${PROJECT_VERSION}
    SOVERSION 0.9
    PUBLIC_HEADER include/DataFlex.h)

target_compile_options(data_flex PUBLIC -std=c++1y -Wall -Wfloat-conversion)

Когда .so действительно загружен, он все равно выдает неопределенные ошибки символов. В погоне за тем, где должны быть эти символы, все они находятся в ha_connect.so. Я знаю, что вышеупомянутый CMakeLists.txt не содержит ссылку на ha_connect.so, но в данный момент я нахожусь в аэропорту и не могу найти другие версии, которые пробовал в данный момент. (отредактировано в ответ на -kanstar (извинения за мое упущение ранее))

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