欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vs2017 编译 ogre x64

程序员文章站 2022-06-17 14:33:59
...

在windows上要用ogre。之前是vs2015版本,编译好的,直接用了。
这次上官网看只有vs2017_x64版本的,下载试用,发现建立 Ogre::Root的时候就错了。
只能自己编译了。

我编译的是ogre 1.10.11 版本。

ogre 经常修改 API,如果某个版本代码工作正常,最好不要换版本,否则要修改非常久。。。

说下编译的坑:

坑一:编译x64版本的不要让ogre自动下载依赖库

ogre为了方便编译,会自动下载zlib等第三方库,直接编译,这样就不用用户编译了,这在编译x86版本时很好。
但是,这个方法有一个致命bug:ogre编译时自动下载的zlib代码,只会编译x86版本。
编译到最后,会出现x86和x64不兼容的问题。

坑二:编译ogredeps

ogre用的第三方库比较多,为了方便编译,自己建了依赖库的目录。bucketbit官网依赖库
github上虽然也有ogredeps,但很久不更新了。
然后下载代码,要clone,直接下载zip可能会漏掉一些支持库
ogredeps下载要非常久,我下载了两个多小时。
下载编译完成,开始编译
这里有一点要说明下,直接编译,之后链接ogre时,会出现如下错误:

error LNK2019: unresolved external symbol [email protected] referenced in function
error LNK2019: unresolved external symbol [email protected] referenced in function
error LNK2019: unresolved external symbol [email protected] referenced in function

这是因为zlib默认不编译dll,要编译dll,要添加预定义宏 ZBLI_WINAPI

坑三:关闭ogre 默认下载编译depdencies

直接在cmake-gui中关闭的ogre默认编译dependencies功能,并不好用,因为:

  1. 第一次还是会下载这些依赖库并编译出来,时间是一方面
  2. 更关键 的是之后要手动在IDE中为各个dll库删除自动下载的库,因为这些库是x86版本的,而且是默认优先被链接。(这点确实应该吐槽CMake的缓存机制,很多时候不好用,只能手工删除才行)
    解决办法:在ogre代码目录/CMake/Dependencies.cmake内,在头几行找OGRE_BUILD_DEPENDENCIES,改为
option(OGRE_BUILD_DEPENDENCIES "automatically build Ogre Dependencies (freetype, zzip)" FALSE)

然后在cmake-gui中将OGRE_DEPENDENCIES_DIR设定为自己编译的ogredeps的目录

至此,可以正常编译ogre 1.10.11

相关标签: ogre x64