链接 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