Я хотел бы создать статическую библиотеку, которая зависит от другой библиотеки, в данном случае ZLIB, для которой у меня уже есть статическая сборка (libz.a).Создайте статическую библиотеку, которая ссылается на другие статические библиотеки
У меня есть следующие:
...
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")
set (BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set (CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) # to find the .a instead of the .so
...
find_package(ZLIB REQUIRED)
if (ZLIB_FOUND)
message(STATUS "ZLIB library: ${ZLIB_LIBRARIES}") # ZLIB library: /usr/lib64/libz.a
include_directories(${ZLIB_INCLUDE_DIRS})
set (EXT_LIBS ${EXT_LIBS} ${ZLIB_LIBRARIES})
endif()
...
add_library (libTest ${MCCORE_SOURCES_CC})
target_link_libraries(libTest ${EXT_LIBS}) #EXT_LIBS = /usr/lib64/libz.a
Однако завершающий этап сборки создает статическую библиотеку, но без ссылки на /usr/lib64/libz.a
экс:
/usr/bin/ar cr libTest.a object1.o object2.o ... objectN.o
Я бы ожидается:
/usr/bin/ar cr libTest.a object1.o object2.o ... objectN.o /usr/lib64/libz.a
Кажется, что окончательное создание архива не заботится о библиотеках, установленных с target_link_libraries
.
Любые идеи?
Что я могу сделать для этого?
Итак, если я правильно понял, вы в основном хотите объединить две статические библиотеки? Ваша библиотека и некоторые другие? Зачем тебе это надо? Эти библиотеки будут связаны с исполняемым файлом. – Anonymous
Я знаю, что это необычно, и что библиотеки будут полностью включены в исполняемый файл, но мне было предложено отправить статическую ссылку на библиотеку, и вы знаете, что клиент всегда прав. Правильно? – yorjo
Я должен отправить ответ завтра утром. Я сделал что-то подобное. – Anonymous