如何linkImageMagic静态库成功?
How to link ImageMagic static libraries successfully?
我编译了源代码,因此我可以将构建文件作为第三方资源用于我的程序。
当我 link IM 使用它的动态库时,这是有道理的,但是,当涉及到静态库时,会发生 linking 错误:
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.20)
project(image_magic_compare)
set(CMAKE_CXX_STANDARD 14)
link_directories(ImageMagick/build/lib)
add_executable(image_magic_compare main.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ImageMagick/build/include/ImageMagick-7)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagickCore-7.Q16HDRI.a)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagickWand-7.Q16HDRI.a)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagick++-7.Q16HDRI.a)
main.cpp:
#include <iostream>
#include "Magick++.h"
using namespace Magick;
int main() {
system("export LD_LIBRARY_PATH=LD_LIBRARY_PATH:./lib/");
std::string source_image, target_image, diff_image;
double fuzz = 0.0;
std::cout << "input source image path: ";
std::cin >> source_image;
std::cout << "\ninput target image path: ";
std::cin >> target_image;
std::cout << "\ninput fuzz threshold: ";
std::cin >> fuzz;
std::cout << "\ninput diff image path: ";
std::cin >> diff_image;
// Magick::InitializeMagick()
Image image1, image2;
image1.read(source_image);
image2.read(target_image);
// auto res = image1.compare(image2);
Magick::ExceptionInfo e;
Image &ref = image2;
Image diff = image1.compare(ref, MagickCore::MetricType::FuzzErrorMetric, &fuzz);
diff.write(diff_image);
// CompareImages();
std::cout << "finish compare!!!" << std::endl;
return 0;
}
ImageMagic构建目录的文件构建:
ImageMagick/build/lib/
├── dump.txt
├── ImageMagick-7.1.0
│ └── config-Q16HDRI
│ └── configure.xml
├── libMagick++-7.Q16HDRI.a
├── libMagick++-7.Q16HDRI.la
├── libMagick++-7.Q16HDRI.so -> libMagick++-7.Q16HDRI.so.5.0.0
├── libMagick++-7.Q16HDRI.so.5 -> libMagick++-7.Q16HDRI.so.5.0.0
├── libMagick++-7.Q16HDRI.so.5.0.0
├── libMagickCore-7.Q16HDRI.a
├── libMagickCore-7.Q16HDRI.la
├── libMagickCore-7.Q16HDRI.so -> libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickCore-7.Q16HDRI.so.10 -> libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.a
├── libMagickWand-7.Q16HDRI.la
├── libMagickWand-7.Q16HDRI.so -> libMagickWand-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.so.10 -> libMagickWand-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.so.10.0.0
└── pkgconfig
├── ImageMagick-7.Q16HDRI.pc
├── ImageMagick.pc
├── Magick++-7.Q16HDRI.pc
├── MagickCore-7.Q16HDRI.pc
├── MagickCore.pc
├── Magick++.pc
├── MagickWand-7.Q16HDRI.pc
└── MagickWand.pc
3 directories, 25 files
有人可以帮助我吗?
我通过使用以下 CMakeLists.txt
使其工作
cmake_minimum_required(VERSION 3.20)
project(image_magic_compare)
set(CMAKE_AUTOGEN_VERBOSE on)
set(CMAKE_CXX_STANDARD 14)
set(ImageMagickLib
Magick++-7.Q16HDRI
MagickWand-7.Q16HDRI
MagickCore-7.Q16HDRI
jbig
lcms2
tiff
freetype
jpeg
lqr-1
glib-2.0
png16
z
djvulibre
fontconfig
freetype
Xext
Xt
SM
ICE
X11
lzma
bz2
IlmImf
xml2
)
link_directories(ImageMagick/static_build/lib)
add_executable(image_magic_compare main.cpp)
target_compile_definitions(${PROJECT_NAME} PUBLIC MAGICKCORE_HDRI_ENABLE=1)
target_compile_definitions(${PROJECT_NAME} PUBLIC MAGICKCORE_QUANTUM_DEPTH=16)
target_include_directories(${PROJECT_NAME} PUBLIC ImageMagick/static_build/include/ImageMagick-7)
target_link_options(${PROJECT_NAME} PUBLIC -fopenmp)
foreach(item IN LISTS ImageMagickLib)
message(STATUS item=${item})
target_link_libraries(${PROJECT_NAME} ${item})
endforeach()
我编译了源代码,因此我可以将构建文件作为第三方资源用于我的程序。
当我 link IM 使用它的动态库时,这是有道理的,但是,当涉及到静态库时,会发生 linking 错误:
这是我的 CMakeLists.txt:
cmake_minimum_required(VERSION 3.20)
project(image_magic_compare)
set(CMAKE_CXX_STANDARD 14)
link_directories(ImageMagick/build/lib)
add_executable(image_magic_compare main.cpp)
target_include_directories(${PROJECT_NAME} PUBLIC ImageMagick/build/include/ImageMagick-7)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagickCore-7.Q16HDRI.a)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagickWand-7.Q16HDRI.a)
target_link_libraries(${PROJECT_NAME} PUBLIC libMagick++-7.Q16HDRI.a)
main.cpp:
#include <iostream>
#include "Magick++.h"
using namespace Magick;
int main() {
system("export LD_LIBRARY_PATH=LD_LIBRARY_PATH:./lib/");
std::string source_image, target_image, diff_image;
double fuzz = 0.0;
std::cout << "input source image path: ";
std::cin >> source_image;
std::cout << "\ninput target image path: ";
std::cin >> target_image;
std::cout << "\ninput fuzz threshold: ";
std::cin >> fuzz;
std::cout << "\ninput diff image path: ";
std::cin >> diff_image;
// Magick::InitializeMagick()
Image image1, image2;
image1.read(source_image);
image2.read(target_image);
// auto res = image1.compare(image2);
Magick::ExceptionInfo e;
Image &ref = image2;
Image diff = image1.compare(ref, MagickCore::MetricType::FuzzErrorMetric, &fuzz);
diff.write(diff_image);
// CompareImages();
std::cout << "finish compare!!!" << std::endl;
return 0;
}
ImageMagic构建目录的文件构建:
ImageMagick/build/lib/
├── dump.txt
├── ImageMagick-7.1.0
│ └── config-Q16HDRI
│ └── configure.xml
├── libMagick++-7.Q16HDRI.a
├── libMagick++-7.Q16HDRI.la
├── libMagick++-7.Q16HDRI.so -> libMagick++-7.Q16HDRI.so.5.0.0
├── libMagick++-7.Q16HDRI.so.5 -> libMagick++-7.Q16HDRI.so.5.0.0
├── libMagick++-7.Q16HDRI.so.5.0.0
├── libMagickCore-7.Q16HDRI.a
├── libMagickCore-7.Q16HDRI.la
├── libMagickCore-7.Q16HDRI.so -> libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickCore-7.Q16HDRI.so.10 -> libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickCore-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.a
├── libMagickWand-7.Q16HDRI.la
├── libMagickWand-7.Q16HDRI.so -> libMagickWand-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.so.10 -> libMagickWand-7.Q16HDRI.so.10.0.0
├── libMagickWand-7.Q16HDRI.so.10.0.0
└── pkgconfig
├── ImageMagick-7.Q16HDRI.pc
├── ImageMagick.pc
├── Magick++-7.Q16HDRI.pc
├── MagickCore-7.Q16HDRI.pc
├── MagickCore.pc
├── Magick++.pc
├── MagickWand-7.Q16HDRI.pc
└── MagickWand.pc
3 directories, 25 files
有人可以帮助我吗?
我通过使用以下 CMakeLists.txt
使其工作
cmake_minimum_required(VERSION 3.20)
project(image_magic_compare)
set(CMAKE_AUTOGEN_VERBOSE on)
set(CMAKE_CXX_STANDARD 14)
set(ImageMagickLib
Magick++-7.Q16HDRI
MagickWand-7.Q16HDRI
MagickCore-7.Q16HDRI
jbig
lcms2
tiff
freetype
jpeg
lqr-1
glib-2.0
png16
z
djvulibre
fontconfig
freetype
Xext
Xt
SM
ICE
X11
lzma
bz2
IlmImf
xml2
)
link_directories(ImageMagick/static_build/lib)
add_executable(image_magic_compare main.cpp)
target_compile_definitions(${PROJECT_NAME} PUBLIC MAGICKCORE_HDRI_ENABLE=1)
target_compile_definitions(${PROJECT_NAME} PUBLIC MAGICKCORE_QUANTUM_DEPTH=16)
target_include_directories(${PROJECT_NAME} PUBLIC ImageMagick/static_build/include/ImageMagick-7)
target_link_options(${PROJECT_NAME} PUBLIC -fopenmp)
foreach(item IN LISTS ImageMagickLib)
message(STATUS item=${item})
target_link_libraries(${PROJECT_NAME} ${item})
endforeach()