Мне нужно создать общий объект (.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 (извинения за мое упущение ранее))