如何强制CMake / G ++ / LD将共享库链接到另一个共享库

时间:2019-07-09 00:56:16

标签: c++ cmake g++ mariadb mariadb-connect-engine

我需要创建一个链接到另一个共享对象的共享对象(.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(为我的遗漏而致歉)进行了编辑)

0 个答案:

没有答案