В настоящее время я действительно очень новичок в C++ и CMake, однако у меня есть программа, которая хочет статически Link ImageMagick, но только ImageMagick.CMake статически Ссылка ImageMagick?
В основном причина мне нужна ImageMagick, которая не поддерживается везде. Я также мог бы клонировать исходный код. В настоящее время мой CMakeList.txt такова:
cmake_minimum_required(VERSION 3.3)
project(envisia_worker)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# ImageMagick
find_package(ImageMagick COMPONENTS Magick++)
# Nuance
link_directories("/usr/local/lib/nuance-omnipage-csdk-lib64-19.2")
# Building
set(SOURCE_FILES main.cpp)
add_executable(envisia_worker ${SOURCE_FILES})
# Nuance
include_directories("/usr/local/include/nuance-omnipage-csdk-19.2")
target_link_libraries(envisia_worker kernelapi recpdf recapiplus)
# ImageMagick
include_directories(${ImageMagick_INCLUDE_DIRS})
target_link_libraries(envisia_worker ${ImageMagick_LIBRARIES})
Однако это будет Свяжите против моих распределений ImageMagick 5. Также я включаю другие библиотеки, они должны остаться dynlib, однако ImageMagick так или иначе должны быть скомпонованы статически, есть ли способ сделать это?
Я не совсем понимаю, что вы хотите. 'однако ImageMagick должен каким-то образом быть связанным статически' - только ** статические библиотеки ** могут быть * статически * связаны с. Можно ли создать «ImageMagick» как набор статических библиотек? Или ваша проблема заключается в том, как сказать 'find_package (ImageMagick)', чтобы найти * свою собственную установку * этого пакета вместо * общесистемного * *? – Tsyvarev
@ Цыварев нет, find_package нашел все, и я мог использовать ImageMagick, однако я подумал, что смогу каким-то образом связать ImageMagick со всеми его зависимостями. Действительно, он действительно имеет отношение к десяткам библиотек и надеется, что каждый дистрибутив имеет правильную версию. Но поскольку я читаю все больше и больше, это не так просто, как я думал, особенно не для ImageMagick –
Итак, вы хотите ** создать исполняемый файл на одной машине и использовать его на другом языке **? И обратите внимание, что связь с некоторыми библиотеками должна использовать их ** пути ** (абсолютные или относительные), потому что вы предоставляете их на другой машине, но связываетесь с некоторыми другими библиотеками (например, с ImageMagick), которые вы хотите быть ** только для имени **, чтобы их можно было найти динамически в каталогах конкретных пакетов? Я просто хочу сделать вопрос более ясным. – Tsyvarev