magick 对magick :: image :: columns的未定义引用
Magick++ undefined reference to Magick::Image::Columns
美好的一天,这是我的代码
#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无法正确编写时,经常会出现未定义的参考文献,但是我根据Magick 的这一做法,如何写Cmakelists?
我在哪里错了?我可以添加所需的任何信息。
upd 1。Magick 的版本,8:6.8.9.9-7ubuntu5.7
系统信息:描述:Linux Mint 18.1 Serena
upd 2。我只是删除了括号,然后尝试用
编译size_t x = image.columns;
size_t y = image.rows;
kdevelok扔了我
main.cpp:25:22:错误:无法转换'magick :: image :: columns'type'size_t(magick :: image ::(:(((const}'type'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 ::( (magick :: image ::( (magick :: image ::*(((const’
发生了什么事?
P.S。哇,这是我在Stackoverflow上的第一个问题!: - (
如果您可以不使用g++ main.cpp `Magick++-config --cxxflags --cppflags --ldflags --libs`
编译程序(但是出于某种原因无法在CMAKE中使用${ImageMagick_LIBRARIES}
(,则可以在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_definitions
和target_include_directories
而不是include_directories
。最好使用本地(基于目标的(命令,而不是在编程和CMake中修改全球状态,因为它们可以无法预料的影响 - 在CMAKE的背景下,这些全球命令会影响嵌套的子 - 项目。
我改编的忘记了ubotterubrella的版本对我来说并不完全有效,从另一个项目中复制了一条线。注意,我正在使用C 20而不是11。
我有以下错误:
..... undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
和修复它的线:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2a -pthread")
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- magick 对magick :: image :: columns的未定义引用