【问题标题】:How to Link Imagemagick library to Qt(windows)如何将 Imagemagick 库链接到 Qt(windows)
【发布时间】:2010-11-10 04:48:23
【问题描述】:

我已经用 mac 开发了一个应用程序,现在一个月,我试图在 windows 上将 Qt 与 ImageMagick 链接起来。

我只是找不到需要链接到 Qt 以使我的应用程序在 Windows 上运行的文件和 Imagemagick 库的版本。

here的大部分库我都试过了

这是我在 Mac 上开发时添加到 .pro 文件中的唯一内容

INCLUDEPATH += . /opt/local/include/ImageMagick
LIBS += -L/opt/local/lib -lMagick++

当我将此添加到我的 .pro 时

INCLUDEPATH += C:/im6/include/ImageMagick
LIBS += C:/im6/lib/libMagickWand.a
LIBS += C:/im6/lib/libMagick++.a
LIBS += C:/im6/lib/libMagickCore.a
C:/im6/lib/libMagick++.a

我得到 10.000 + 类似的错误:

(Image.o):C:\msys\1.0\home\cristy\ImageMagick-6.6.6-0/Magick++/lib/Image.cpp:4157: undefined reference to `__gxx_personality_sj0'
    
    C:/im6/lib/libMagick++.a(Image.o):C:\msys\1.0\home\cristy\ImageMagick-6.6.6-0/Magick++/lib/Image.cpp:4157: undefined reference to `_Unwind_SjLj_Register'
    
    C:/im6/lib/libMagick++.a(Image.o):C:\msys\1.0\home\cristy\ImageMagick-6.6.6-0/Magick++/lib/Image.cpp:4178: undefined reference to `_Unwind_SjLj_Unregister'

更多错误请查看this

有没有人尝试在 windows 上使用 qt 构建和部署 ImageMagick 应用程序? 构建时需要链接哪些文件,部署时需要链接哪些文件?

【问题讨论】:

    标签: c++ qt imagemagick


    【解决方案1】:
    1. 错误消息告诉我,您 使用 mingw(与 qtcreator)。您的 库可能不适用于此 编译器。你需要一个mingw版本 图书馆的,可能命名为 libmagick.a.

    2. LIBS += -L$$quote(c:/Program Files/ImageMagick-6.6.5-Q16/lib) -lmagick (请参阅有关qmake Project Files的文档

    【讨论】:

    • 您好,我已经下载了 mingw 版本并尝试链接 lib 文件夹中的所有 3 个 .a 文件,我的编译器显示:C:/im6/lib/libMagick++.la: 文件无法识别:文件格式无法识别当我尝试 LIBS += -L$$quote(C:/im6/lib/) -lmagick 它说:c:/qt/20​​10.05/mingw/bin/../lib/gcc/mingw32/4.4 .0/../../../../mingw32/bin/ld.exe:找不到-lmagick
    【解决方案2】:

    我发现 minGW 工具集在 Windows 世界中被视为“继子”。我知道这对您的特定情况没有帮助,但是在尝试将 Qt 与 minGW 一起使用时,我们遇到了很多第三方库问题。总是有额外的步骤,或者我们必须弄清楚或调整的构建指令不存在。

    一旦我们切换到 MSVC 版本,所有这些问题都消失了。请注意,这并不意味着您必须使用 Visual Studio(您仍然可以使用 Qt creator),它只是意味着正在使用 Visual Studio 编译器。您可以使用 Platform SDK 免费获取编译器。如果这是一个选项,您现在可以通过切换来为自己省去很多痛苦。很不幸,但这只是目前的现状,至少我们发现是这样。

    【讨论】:

      【解决方案3】:

      请去获取ImageMagick源码包。

      我无法直接说明如何使用 Qt Creator 的 MinGW,但基本上遵循。我更喜欢使用 Qt 二进制发行版附带的 qtvars.bat 来设置环境。

      1. 打开 Windows cmd
      2. 将 PATH 设置为在其他路径之前具有 /path/to/mingw/bin 和 /path/to/qt/bin
      3. 转到您提取 ImageMagick 源代码的目录
      4. 阅读 README、INSTALL 等以编译 ImageMagick(很可能只是 ./configure ; mingw32-make,但永远不能确定)
      5. 使用 LIBS += -L$$quote(/path/to/imagemagick/lib/dir) -lmagick 之类的内容编辑 .pro 文件。 lib 可能位于 bin 目录或 lib 目录中。有关更多信息,请参阅 hmuelner 的答案。

      此时,配置应该已准备就绪。在 Qt Creator 上编译应该可以工作,但你也可以使用这个 cmd 窗口来编译你的程序:进入程序目录,运行“qmake”和“mingw32-make”。

      【讨论】:

      • 您好,Smar,我完全按照您的建议进行了尝试。开./配置; mingw32-make 我得到: proccess_begin: CreateProcess 失败。 make : 系统找不到指定的文件。 mingw32-make[1]: *** [magick/.dirstamp] 有什么想法吗?
      • 您可能需要使用 MSYS 来编译 ImageMagick:它似乎使用 Unix 风格的二进制文件和路径,所以 MSYS 会处理它们。在 INSTALL 或 README 或任何构建文档中都没有提到这一点?
      【解决方案4】:

      您不能链接到使用 MSVC 构建的 ImageMagick++ 库,因为 mingw 和 MSVC DLL 与 C++ 库不兼容。您不能将 MSVC 构建的 C++ 库链接到 mingw 项目,反之亦然。仅限 C 的库工作正常。此外,根据to this fortum thread,使用当前 mingw 版本的旧 mingw 版本的构建不起作用,因为异常处理发生了变化(因为你得到的错误比这更多,但我不认为这是唯一的问题)。如果您的 mingw 版本没有二进制包(并且我在 imagemagick 网站上没有看到任何二进制包),那么您唯一的选择是使用源包,正如 Smar 建议的那样。

      当然,另一种选择是安装 Visual Studio,下载 Qt for MSVC 并使用 MSVC 构建您的项目。

      【讨论】:

        猜你喜欢
        • 2011-06-11
        • 2015-05-16
        • 2021-09-29
        • 2018-10-08
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多