【问题标题】:linking vs 2012 c++ GDAL链接 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++ 中的调用约定是什么->高级?

标签: c++ visual-c++ visual-studio-2012 gdal


【解决方案1】:

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

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

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

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

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

-赖利。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2013-11-05
      • 1970-01-01
      • 2016-01-20
      • 2013-12-27
      相关资源
      最近更新 更多