ImageMagick与另一个项目的静态编译会给出链接器错误

问题描述 投票:5回答:3

我已经下载了ImageMagick的源代码,编译了向导以创建用于静态链接的Visual Studio解决方案,并将静态库Magick ++项目包含在我的示例项目中(下面的代码)。我还添加了对该项目的依赖关系,并在解决方案中包括了.lib文件,没有任何帮助。

#include <Magick++.h>

int main()
{
    Magick::Image image;
    bool test = image.isValid();
    return 0;
}

这会给出一些链接器错误,例如:

未解析的外部符号“ __declspec(dllimport)公共:虚拟__thiscall Magick :: Image ::〜Image(void)”(__imp _ ?? 1Image @ Magick @@ UAE @ XZ)在函数_main中引用

为什么找不到实现?

我正在使用Visual Studio 2010 Beta 2。

c++ imagemagick static-linking magick++
3个回答
2
投票

该问题可能是由于您使用的库与编译时所用的编译器不同。由于您的编译器是相当新的,很可能它使用了不同的名称修饰,并且无法在库中找到方法签名。


0
投票

此错误很奇怪-编译器正在从DLL(__declspec(dllimport))寻找函数。您确定使用的是正确的头文件吗?


0
投票

链接ImageMagick静态库的答案是确保还链接ALL依赖的静态库!

一旦您为ImageMagick静态库编译了解决方案,请转到“ VisualMagick”文件夹(在ImageMagick克隆存储库中),然后转到“ lib”文件夹,您将看到所有的[[_DB _。lib和< [_RL _。lib文件用于调试和发布。

对于发行版和调试,您需要在“其他依赖项”部分中包含这些名称。您还必须确保在“其他库目录”中同时具有“发行版”和“调试”的“库”文件夹路径。

另一个关键方面是确保库是由与您自己的应用程序..(WIN32或x64)相同的编译器针对相同的平台体系结构构建的。

© www.soinside.com 2019 - 2024. All rights reserved.