itsource

CMake / G++ / LD가 다른 공유 객체에 대해 공유 객체를 연결하도록 강제하는 방법

mycopycode 2023. 8. 25. 23:34
반응형

CMake / G++ / LD가 다른 공유 객체에 대해 공유 객체를 연결하도록 강제하는 방법

다른 공유 개체와 연결된 공유 개체(.so)를 만들어야 합니다(내 코드는 해당 공유 개체에서 내보낸 함수/기호를 사용합니다).Cmake / G++ / LD는 제가 어떤 방법을 시도해도 연결 작업에 공유 객체를 포함하는 것을 거부합니다.

특히 MariaDB CONNECT 엔진의 OEM 테이블 유형을 구현하고 있습니다.저는 이러한 CMake 지침과 ZERO 성공에 수반되는 지침을 사용하려고 시도했습니다.

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에 대한 대응 (앞서 제가 누락한 것에 대해 사과드립니다)

언급URL : https://stackoverflow.com/questions/56944123/how-to-force-cmake-g-ld-to-link-shared-object-against-another-shared-objec

반응형