【发布时间】:2021-08-04 09:47:36
【问题描述】:
我编译了源代码,因此我可以将构建文件作为第三方资源用于我的程序。 当我将 IM 与其动态库链接时,这是有道理的,但是,当涉及到静态库时,会发生链接错误:
这是我的 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
有人可以帮助我吗?
【问题讨论】:
-
检查 CRT 编译选项(在项目中必须相同,如所有“调试 DLL”或所有“调试”)。
-
@MichaelChourdakis 抱歉,什么是“CRT”?
-
请将您的错误信息粘贴为文本,最好是英文文本。另外,请使用
make VERBOSE=1显示构建的输出。我怀疑这与静态库的链接顺序有关。 -
那里有非常好的 pkg-config 文件...why aren't you using them?
标签: c++ cmake imagemagick