无法调用Magick++ API函数(未定义引用错误)
Windows10下编译Magick++代码报错:
undefined reference to Magick::InitializeMagick(char const*) 环境与尝试过程
1. 官网安装ImageMagick的情况
- 系统:Windows10
- 安装包:
ImageMagick-7.1.1-12-Q16-HDRI-x64-dll.exe,安装时勾选了C/C++开发头文件和库 - 安装路径:
E:\Programs\ImageMagick-7.1.1-Q16-HDRI,头文件目录E:\Programs\ImageMagick-7.1.1-Q16-HDRI\include,库目录E:\Programs\ImageMagick-7.1.1-Q16-HDRI\lib
测试代码:
#include <iostream> #include "Magick++.h" int main(int argc,char **argv) { Magick::InitializeMagick("E:\\Programs\\ImageMagick-7.1.1-Q16-HDRI"); return 0; }
使用g++ 13.1.0在PowerShell执行编译命令:
g++.exe main.cpp -o main.exe -IE:\Programs\ImageMagick-7.1.1-Q16-HDRI\include -LE:\Programs\ImageMagick-7.1.1-Q16-HDRI\lib -lCORE_RL_Magick++_ -lCORE_RL_MagickCore_ -lCORE_RL_MagickWand_
编译失败,错误信息:
undefined reference to Magick::InitializeMagick(char const*)
2. Msys2安装+CMake构建的情况
通过Msys2安装了mingw-w64-x86_64-imagemagick 7.1.1.11-1,使用VSCode的CMake工具构建项目,CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.0.0) project(imgk VERSION 0.1.0 LANGUAGES C CXX) include(CTest) enable_testing() find_package(ImageMagick COMPONENTS Magick++ REQUIRED) find_program(MAGICK_CONFIG "Magick++-config") execute_process(COMMAND "${MAGICK_CONFIG}" "--cxxflags" OUTPUT_VARIABLE MAGICK_CXX_FLAGS) execute_process(COMMAND "${MAGICK_CONFIG}" "--cppflags" OUTPUT_VARIABLE MAGICK_CPP_FLAGS) execute_process(COMMAND "${MAGICK_CONFIG}" "--ldflags" OUTPUT_VARIABLE MAGICK_LD_FLAGS) execute_process(COMMAND "${MAGICK_CONFIG}" "--libs" OUTPUT_VARIABLE MAGICK_LIBS_FLAGS) string(STRIP "${MAGICK_CXX_FLAGS}" MAGICK_CXX_FLAGS) string(STRIP "${MAGICK_LD_FLAGS}" MAGICK_LD_FLAGS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 ${MAGICK_CXX_FLAGS} ${MAGICK_LIBS_FLAGS} ${MAGICK_CPP_FLAGS} ${MAGICK_LD_FLAGS}") add_executable(imgk main.cpp) add_definitions( -DMAGICKCORE_QUANTUM_DEPTH=16 ) add_definitions( -DMAGICKCORE_HDRI_ENABLE=0 ) include_directories(${ImageMagick_INCLUDE_DIRS}) target_link_libraries(imgk $${ImageMagick_LIBRARIES}) set(CPACK_PROJECT_NAME ${PROJECT_NAME}) set(CPACK_PROJECT_VERSION ${PROJECT_VERSION}) include(CPack)
构建过程同样触发相同的未定义引用错误。
内容的提问来源于stack exchange,提问作者Reyna
相关产品推荐
相关产品推荐

