0

我需要创建一个与另一个共享对象链接的共享对象 (.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而编辑(为我之前的遗漏道歉))

4

0 回答 0