【发布时间】:2017-11-09 13:02:30
【问题描述】:
美好的一天, 这是我的代码
#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: 未定义引用 `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 编写不正确时,通常会出现未定义引用的问题,但我是根据这个 About Magick++, how to write the CMakeLists?
我哪里错了?我可以添加任何需要的信息。
UPD 1。 魔术师++的版本, 8:6.8.9.9-7ubuntu5.7
系统信息: 说明:Linux Mint 18.1 Serena
UPD 2。 我刚刚删除了括号,并在尝试编译时使用
size_t x = image.columns;
size_t y = image.rows;
KDevelop 把我扔了
main.cpp:25:22: 错误: 无法从类型 'size_t (Magick::Image::)() 转换 'Magick::Image::columns' const {aka long unsigned int (Magick::Image: :)() const}' 输入 'size_t {aka long unsigned int}'
即使
auto x = image.columns;
auto y = image.rows;
它抛出
main.cpp:25:20: 错误: 无法将‘Magick::Image::columns’从 输入‘size_t (Magick::Image::)() const {aka long unsigned int (Magick::Image::)() const}' 输入'long unsigned int (Magick::Image::*)() const'
发生了什么事?
附:万岁,这是我关于stackoverflow的第一个问题! :-)
【问题讨论】:
-
尝试将
int x切换为size_t x。能否介绍一下安装的 ImageMagick 的系统和版本? -
@emcconville 感谢您的提示,但没有帮助,仍然抛出同样的错误
-
不带括号的错误消息表明它无法将不带参数 (
()) 并返回size_t的方法 ((Magick::Image::)) 转换为值(size_t类型)。换句话说,您需要括号,因为它是您应该调用的函数。 (对于auto,它不能将方法转换为方法指针(Magick::Image::*)。) -
你可以尝试用
g++ main.cpp `Magick++-config --cxxflags --cppflags --ldflags --libs`编译,看看它是否有效?
标签: c++ imagemagick magick++