Как я могу stati c связать эти файлы lib с моим проектом CMAKE? - PullRequest
0 голосов
/ 08 мая 2020

Привет, я новичок в CMAKE, и я пытаюсь c привязать следующие файлы библиотеки к моему проекту:

/usr/lib/i386-linux-gnu/libsqlite3.so.0 
/usr/local/lib/libprotobuf.so.15            
/lib/i386-linux-gnu/libpthread.so.0
/usr/local/lib/libzmq.so.5
/usr/local
/usr/lib/i386-linux-gnu/libsqlite3.so.0/usr/local/lib/libprotobuf.so.15/lib/i386-linux-gnu/libpthread.so.0/usr/local/lib/libzmq.so.5/usr/local/

Я читал документацию CMAKE, а также предыдущие сообщения отсюда, все, что мне нужно сделать, это связать эти библиотеки с исполняемым файлом с помощью `target_link_directories () ', однако запуск ldd в двоичном файле не показывает, что они связаны.

Сначала я создаю исполняемый файл с add_executable:

add_executable( main ${PROJECT_SOURCE_DIR}/src/main.cpp )

Я устанавливаю пути к файлам .a lib по:

find_library(STATIC_LSQLITE  NAME libsqlite3.a HINTS ${CMAKE_INSTALL_PREFIX})
find_library(STATIC_LPROTO NAME libprotobuf.a HINTS ${CMAKE_INSTALL_PREFIX})
find_library(STATIC_LPTHREAD NAMES libpthread.a )
find_library(STATIC_LZMQ NAMES libzmq.a)
find_library(STATIC_LCURL NAMES libcurl.a)

set ( STATIC_LIBS ${STATIC_LSQLITE} ${STATIC_LPROTO} ${STATIC_LPTHREAD} ${STATIC_LZMQ} ${STATIC_LCURL} )

из которых дает полный путь STATIC_LIBS:

/usr/lib/i386-linux-gnu/libsqlite3.a/usr/local/lib/libprotobuf.a/usr/lib/i386-linux-gnu/libpthread.a/usr/local/lib/libzmq.a/usr/local/lib/libcurl.a

, а затем:

target_link_libraries( main ${STATIC_LIBS} )

Однако при компиляции ldd показывает:

libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xf7e6a000)
libprotobuf.so.15 => /usr/local/lib/libprotobuf.so.15 (0xf7be3000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7bc6000)
libzmq.so.5 => /usr/local/lib/libzmq.so.5 (0xf7ae0000)
libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0xf7a50000)

Я уже некоторое время чесал голову по этому поводу, так что любая помощь было бы здорово.

Я думал иначе, когда запустил make package, я мог бы передать файлы lib в команде install(), но мне тоже не удалось заставить это работать. Код для моей попытки установки библиотек:

install(
    TARGETS         main 
    DESTINATION     "/path/to/install"
    ) 
install(
    FILES ${PROJECT_SOURCE_DIR}/src/config.conf
    DESTINATION "/path/to/install"
    )
install(
    LIBRARY ${STATIC_LIBS}
    DESTINATION "/path/to/install"
    )
...