在 XCode C++ 应用程序中使用 ImageMagick 时出现问题
Problems using ImageMagick in XCode C++ application
我正在尝试使用 ImageMagick 将图像加载到我的 C++ 应用程序中;我在 XCode 7 中发展。我正在挣扎。这是我的代码。
#include "Magick++.h"
int main(int argc, const char * argv[]) {
Magick::Image img;
return 0;
}
我得到的错误如下。
Ld /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug/clsFusion normal x86_64
cd /Users/ndwork/Desktop/clsFusion
export MACOSX_DEPLOYMENT_TARGET=10.11
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -L/Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug -L/opt/X11/lib -F/Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug -filelist /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Intermediates/clsFusion.build/Debug/clsFusion.build/Objects-normal/x86_64/clsFusion.LinkFileList -mmacosx-version-min=10.11 -Xlinker -no_deduplicate -stdlib=libc++ -lX11.6 -Xlinker -dependency_info -Xlinker /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Intermediates/clsFusion.build/Debug/clsFusion.build/Objects-normal/x86_64/clsFusion_dependency_info.dat -o /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug/clsFusion
Undefined symbols for architecture x86_64:
"Magick::Image::Image()", referenced from:
_main in main.o
"Magick::Image::~Image()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
您可以看到我已经将 Magick++.h 所在的目录包含在 header 搜索路径中。我不确定如何解决这个问题。我用自制软件安装了 ImageMagick。
感谢所有帮助!
如果您没有安装名为 pkg-config
的 homebrew
软件包,请先安装:
brew install pkg-config
然后它可以告诉你如何编译和link它知道的所有包,所以让我们看看它知道哪些包:
pkg-config --list-all | grep -i Magick
示例输出
...
...
libswscale libswscale - FFmpeg image rescaling library
ImageMagick ImageMagick - ImageMagick - convert, edit, and compose images (ABI Q16HDRI)
vips-cpp vips-cpp - C++ API for vips8 image processing library
lept leptonica - An open source C library for efficient image processing and image analysis operations
MagickCore-7.Q16HDRI MagickCore - MagickCore - C API for ImageMagick (ABI Q16HDRI)
MagickWand MagickWand - MagickWand - C API for ImageMagick (ABI Q16HDRI)
gdk-pixbuf-2.0 GdkPixbuf - Image loading and scaling
OpenEXR OpenEXR - OpenEXR image library
vips vips - Image processing library
Magick++ Magick++ - Magick++ - C++ API for ImageMagick (ABI Q16HDRI)
...
...
好的,Magick++
看起来很适合你。让我们找到 header 文件路径(对于 #includes
):
pkg-config --cflags-only-I Magick++
示例输出
-I/usr/local/Cellar/imagemagick/HEAD-a781824/include/ImageMagick-7
和 linker 标志 - 这实际上是您的问题:
pkg-config --libs Magick++
示例输出
-L/usr/local/Cellar/imagemagick/HEAD-a781824/lib -lMagick++-7.Q16HDRI -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI
显然,您的值会有所不同,具体取决于您构建 ImageMagick 使用的 build-time 选项 - 所以请使用您自己的值,而不是我的。
现在您只需要将它们放入 Xcode - 因此请按顺序单击 red-outlined 框并编辑您在上面学到的详细信息,即:
- Header 搜索路径
- 库搜索路径
- 图书馆 link
您还应该按照以下建议定义相同的定义:
pkg-config --cflags-only-other Magick++
示例输出
-DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
在你满意的地方。
我正在尝试使用 ImageMagick 将图像加载到我的 C++ 应用程序中;我在 XCode 7 中发展。我正在挣扎。这是我的代码。
#include "Magick++.h"
int main(int argc, const char * argv[]) {
Magick::Image img;
return 0;
}
我得到的错误如下。
Ld /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug/clsFusion normal x86_64
cd /Users/ndwork/Desktop/clsFusion
export MACOSX_DEPLOYMENT_TARGET=10.11
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk -L/Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug -L/opt/X11/lib -F/Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug -filelist /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Intermediates/clsFusion.build/Debug/clsFusion.build/Objects-normal/x86_64/clsFusion.LinkFileList -mmacosx-version-min=10.11 -Xlinker -no_deduplicate -stdlib=libc++ -lX11.6 -Xlinker -dependency_info -Xlinker /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Intermediates/clsFusion.build/Debug/clsFusion.build/Objects-normal/x86_64/clsFusion_dependency_info.dat -o /Users/ndwork/Library/Developer/Xcode/DerivedData/clsFusion-ghktzemmmuxtfidyywslbqxztyqz/Build/Products/Debug/clsFusion
Undefined symbols for architecture x86_64:
"Magick::Image::Image()", referenced from:
_main in main.o
"Magick::Image::~Image()", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
您可以看到我已经将 Magick++.h 所在的目录包含在 header 搜索路径中。我不确定如何解决这个问题。我用自制软件安装了 ImageMagick。
感谢所有帮助!
如果您没有安装名为 pkg-config
的 homebrew
软件包,请先安装:
brew install pkg-config
然后它可以告诉你如何编译和link它知道的所有包,所以让我们看看它知道哪些包:
pkg-config --list-all | grep -i Magick
示例输出
...
...
libswscale libswscale - FFmpeg image rescaling library
ImageMagick ImageMagick - ImageMagick - convert, edit, and compose images (ABI Q16HDRI)
vips-cpp vips-cpp - C++ API for vips8 image processing library
lept leptonica - An open source C library for efficient image processing and image analysis operations
MagickCore-7.Q16HDRI MagickCore - MagickCore - C API for ImageMagick (ABI Q16HDRI)
MagickWand MagickWand - MagickWand - C API for ImageMagick (ABI Q16HDRI)
gdk-pixbuf-2.0 GdkPixbuf - Image loading and scaling
OpenEXR OpenEXR - OpenEXR image library
vips vips - Image processing library
Magick++ Magick++ - Magick++ - C++ API for ImageMagick (ABI Q16HDRI)
...
...
好的,Magick++
看起来很适合你。让我们找到 header 文件路径(对于 #includes
):
pkg-config --cflags-only-I Magick++
示例输出
-I/usr/local/Cellar/imagemagick/HEAD-a781824/include/ImageMagick-7
和 linker 标志 - 这实际上是您的问题:
pkg-config --libs Magick++
示例输出
-L/usr/local/Cellar/imagemagick/HEAD-a781824/lib -lMagick++-7.Q16HDRI -lMagickWand-7.Q16HDRI -lMagickCore-7.Q16HDRI
显然,您的值会有所不同,具体取决于您构建 ImageMagick 使用的 build-time 选项 - 所以请使用您自己的值,而不是我的。
现在您只需要将它们放入 Xcode - 因此请按顺序单击 red-outlined 框并编辑您在上面学到的详细信息,即:
- Header 搜索路径
- 库搜索路径
- 图书馆 link
您还应该按照以下建议定义相同的定义:
pkg-config --cflags-only-other Magick++
示例输出
-DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16
在你满意的地方。