arccpp 发表于 2008-12-24 16:50:15

osggis编译出错

我使用的是vs2008编译osg代码,编译过程中出现了如下错误提示:
C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(359) : error C3163: “_vsnprintf”: 属性与以前的声明不一致
大家有遇到这种问题吗?
如果有人解决的话,是怎么解决的?

x_wp 发表于 2008-12-24 18:09:19

标题不是编译osggis吗?帖子里怎么又成了编译osg?请问你到底是编译什么?osggis没编译过,osg我倒是用vc2008编译成功过。就是参考的本论坛中array的教程,先用cmake生成工程,再用vc打开编译就成了。个别文件中有编码问题,就是有些字符识别不了,成了问号,改一下再编译就好了。
不行在网上搜一下vc的环境变量设置,设置好了再编译试试。

[ 本帖最后由 x_wp 于 2008-12-24 18:12 编辑 ]

array 发表于 2008-12-24 18:31:05

这个函数蛮知名的,是MSVC与C语言标准格格不入的著名案例。使用C语言标准编写的代码如果用了snprintf, vsnprintf,到MSVC下都会出问题。

先想办法去除楼主的错误再看看,直接修改stdio.h#if (_MSC_VER < 1500)
#define vsnprintf _vsnprintf
#endif

[ 本帖最后由 array 于 2008-12-24 18:32 编辑 ]

arccpp 发表于 2008-12-25 09:03:08

回复 2楼 的帖子

to x_wp:对不起我打漏了,应该是osggis,osg我已经在我的系统上编译成功了

arccpp 发表于 2008-12-25 09:12:51

回复 3楼 的帖子

to array: 确实就是这个问题,但是直接修改stdio.h问题依然,仔细看发现是在编译OGR_Utils.cpp时报的这个错,然而OGR_Utils.cpp里却根本没有类似#define vsnprintf _vsnprintf之类的定义,于是打开其对应的头文件,依然没有找到,头文件嵌套头文件,我靠,真是麻烦大了,后来实在没办法了,就把所有的头文件打开搜索,居然让我找到了,这个预定义出现在cpl_config.h里:
#define vsnprintf _vsnprintf
#define snprintf _snprintf
将这两行代码按你所说进行修改:
#if _MSC_VER < 1500
#define snprintf _snprintf
#define vsnprintf _vsnprintf
#endif
编译通过! 打完收工 :)
页: [1]
查看完整版本: osggis编译出错