gpt4 book ai didi

c++ - Magick++ 未定义对 Magick::Image::Columns 的引用

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:21 25 4
gpt4 key购买 nike

美好的一天,这是我的代码

#include <iostream>
#include <Magick++.h>
using namespace std;
using namespace Magick;
int main(int argc, char **argv) {
InitializeMagick(*argv);
Image image;
try {
image.read(argv[1]);
}
catch( Exception &error_ ) {
cout << "Caught exception: " << error_.what() << endl;
return 1;
}
int x = image.columns();
cout<<"your picture's width is "<< x << "px"<<endl;
return 0;
}

我使用 KDevelop(它使用 CMake 作为构建器),当我尝试编译应用程序时,它抛出一个错误

main.cpp:25: undefined reference to `Magick::Image::columns() const'

这是我的 CMakeLists.txt 包含的内容。

cmake_minimum_required(VERSION 3.5)
project(hello)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp)

add_executable(hello ${SOURCE_FILES})
add_definitions( -DMAGICKCORE_QUANTUM_DEPTH=16 )
add_definitions( -DMAGICKCORE_HDRI_ENABLE=0 )
find_package(ImageMagick COMPONENTS Magick++)
include_directories(${ImageMagick_INCLUDE_DIRS})
target_link_libraries(hello ${ImageMagick_LIBRARIES})

我发现当 CMakeLists 没有正确编写时, undefined reference 经常会出现问题,但我是根据这个 About Magick++, how to write the CMakeLists? 做的

我哪里错了?我可以添加任何需要的信息。

更新 1。magick++ 的版本,8:6.8.9.9-7ubuntu5.7

系统信息:描述:Linux Mint 18.1 Serena

更新 2。我刚刚删除了括号,并在尝试使用

进行编译时
size_t x = image.columns;
size_t y = image.rows;

KDevelop 把我扔了

main.cpp:25:22: error: cannot convert ‘Magick::Image::columns’ from type ‘size_t (Magick::Image::)() const {aka long unsigned int (Magick::Image::)() const}’ to type ‘size_t {aka long unsigned int}’

即使

auto x = image.columns;
auto y = image.rows;

它抛出

main.cpp:25:20: error: cannot convert ‘Magick::Image::columns’ from type ‘size_t (Magick::Image::)() const {aka long unsigned int (Magick::Image::)() const}’ to type ‘long unsigned int (Magick::Image::*)() const’

这是怎么回事?

附言万岁,这是我在 stackoverflow 上的第一个问题! :-)

最佳答案

如果您能够在没有 CMake 的情况下使用 g++ main.cpp `Magick++-config --cxxflags --cppflags --ldflags --libs` 编译您的程序(但由于某些原因不能使用 ${ImageMagick_LIBRARIES} 在 CMake 中),那么您可以在 CMakeLists.txt 中使用 Magick++-config:

cmake_minimum_required(VERSION 3.5)
project(hello LANGUAGES CXX)

add_executable(hello main.cpp)
target_compile_features(hello PRIVATE cxx_std_11)
find_package(ImageMagick REQUIRED COMPONENTS Magick++)
target_compile_definitions(hello PRIVATE
MAGICKCORE_QUANTUM_DEPTH=16
MAGICKCORE_HDRI_ENABLE=0
)
target_include_directories(hello PRIVATE ${ImageMagick_INCLUDE_DIRS})

execute_process(COMMAND Magick++-config --ldflags
OUTPUT_VARIABLE ImageMagick_LINK_FLAGS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
target_link_libraries(hello PRIVATE ${ImageMagick_LINK_FLAGS})

这里,execute_process 允许我们将 Magick++-config --ldflags 的结果放入一个变量中,我们可以通过 将其作为标志传递给链接器target_link_libraries.

另外,请注意我是如何使用 target_compile_features 而不是设置全局 CMAKE_CXX_FLAGS 变量,target_compile_definitions 而不是 add_definitionstarget_include_directories 而不是 include_directories。最好使用本地(基于目标的)命令而不是修改全局状态,无论是在编程中还是在 CMake 中,因为它们可能会产生无法预料的后果——在 CMake 的上下文中,这些全局命令会影响嵌套的子-项目。

关于c++ - Magick++ 未定义对 Magick::Image::Columns 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com