使用VS2015编译OSG3.6.3时的问题

刚才编了一下OpenSceneGraph 3.6.3

编译没遇到什么大问题,编完发现三个东西没编成功

plugins freetype 和plugins jpeg的:

错误    LNK2019    无法解析的外部符号 __imp_sprintf

无法解析的外部符号 __imp___iob_func

无法解析的外部符号 __imp_sscanf

无法解析的外部符号 __imp_fprintf

想起以前就遇到过,这么解决忘了。后来搜了一下,果然是老问题。

加上静态库:legacy_stdio_definitions.lib

使用VS2015编译OSG3.6.3时的问题_第1张图片

再在plugins jpeg的ReaderWriterJPEG.cpp里,加上下面这段:


#if _MSC_VER>=1900
#include "stdio.h" 
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus 
extern "C"
#endif 
FILE* __cdecl __iob_func(unsigned i) {
	return __acrt_iob_func(i);
}
#endif

再编一下,这两个编成功了。

然后还有Plugins nvtt,一大堆错误:

error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900”(NVTTImageProcessor.obj 中)

1>nvtt.lib(Context.obj) : error LNK2001: 无法解析的外部符号 "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPEBDH@Z)
1>nvtt.lib(Surface.obj) : error LNK2001: 无法解析的外部符号 __imp_printf
1>nvcore.lib(StrLib.obj) : error LNK2001: 无法解析的外部符号 __imp_vsnprintf_s
1>MSVCRT.lib(vsnprintf_s.obj) : error LNK2001: 无法解析的外部符号 __imp_vsnprintf_s
1>nvcore.lib(StrLib.obj) : error LNK2001: 无法解析的外部符号 __imp__vacopy
1>MSVCRT.lib(vsnprintf_s.obj) : error LNK2001: 无法解析的外部符号 __imp__vsnprintf_s

_MSC_VER不匹配的问题,之前遇到应该是lib的vs版本不一致。这又涉及到vs版本问题,各种版本容易模糊,visual studio中的各种版本对应关系,随时需要查。VS2015,_MSC_VER是1900,对应VC++14.0。

_MSC_VER是一个预定义宏,代码中用于区分当前的编译器版本。

在项目设置中,属性-常规-平台工具集,可以更改编译器版本

使用VS2015编译OSG3.6.3时的问题_第2张图片

改成v120,竟然编译成功了。具体为什么出现这种情况?为什么改了就好了?等以后具体研究

至此,所有的东西都编好了。但是我发现,fbx的插件项目没有,这是因为cmake时第三方库中没有找到fbx库。等后面再加入吧。

你可能感兴趣的:(使用VS2015编译OSG3.6.3时的问题)