链接 vs 2012 c++ GDAL

Posted

技术标签:

【中文标题】链接 vs 2012 c++ GDAL【英文标题】:linking vs 2012 c++ GDAL 【发布时间】:2013-11-13 14:29:45 【问题描述】:

我用 VS 2012 Pro 创建了一个标准的 windows 应用程序。只是一个如下所示的 main.cpp:

#include "gdal_priv.h"
#include "cpl_conv.h"

int main(int argc, char* argv[])

   GDALAllRegister();

    return 0;

我已正确设置我的包含路径。我的链接器中有 gdal_i.lib -> 输入 -> 附加依赖项。

链接失败并显示以下消息:

1>main.obj:错误 LNK2019:未解析的外部符号 函数_main中引用的_GDALAllRegister@0

(也缺少许多其他符号,但这个应该很容易。)

我使用了dumpbin,导出的符号中出现了GDALAllRegister。它确实显示为“GDALAllRegister”,而不是“_GDALAllRegister@0”。

我尝试下载和使用 dev 构建,也构建了自己。结果相同。

我只知道这很简单,但我在这里完全是脑筋急转弯。我做错了什么?

谢谢。

-赖利。

【问题讨论】:

_GDALAllRegister@0 是编译器选择构造函数别名的方式。我真的不知道为什么它不链接,但您可以尝试使用固定路径来查看它是否会构建即。 #inlcude "c:/pathto/cpl_conv.h" 你在 C++ 中的调用约定是什么->高级? 【参考方案1】:

我说它简单而愚蠢,确实如此。

我将构建管理器设置为构建 32 位。

我生命中的另外 4 个小时,我再也回不来了。

感谢 Manuell 的建议。它让我转向不同的方向,然后我找到了。

对不起,社区。这就是编程累了。

-赖利。

【讨论】:

【参考方案2】:

这种错误是 EXE 和 LIB 之间“调用约定”不匹配的典型错误。

检查你有 __cdecl (/Gd) 在“配置属性” -> C++ -> 高级 -> “调用约定”

【讨论】:

以上是关于链接 vs 2012 c++ GDAL的主要内容,如果未能解决你的问题,请参考以下文章

VS2010 c++编译的时候总是出现找不到exe文件、这是个啥情况

[C++][修改]GDAL源码编译vs2015/vs2017/vs2019

C++ / VS 2012 - 多项目解决方案:一个项目中的链接器错误但另一个项目中没有

在 VS2012 中链接源和库目录

VS2008编译GDAL 1.8.1(转)

在 VS 2012 中使用 mysql 连接器 C++