我需要创建一个链接到另一个共享对象的共享对象(.so)(我的代码使用该共享对象导出的函数/符号)。无论我做什么,CMake / G ++ / LD都拒绝在链接操作中包括共享对象。
具体地说,我正在为MariaDB CONNECT引擎实现OEM表类型。我尝试将这些CMake指令及其随附的指令成功使用为零:
link_directories()
add_library()
find_library()
target_link_libraries()
我全神贯注。我的代码确实 compile ,并且根据设置显示要链接,但是我检查时总是缺少ha_connect.so依赖项,因此加载时会引发未定义的符号错误。
我已经尝试过争取Olivier Bertrand(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(为我的遗漏而致歉)进行了编辑)