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功能,并不好用,因为:
- 第一次还是会下载这些依赖库并编译出来,时间是一方面
-
更关键 的是之后要手动在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
下一篇: vs2017 编译 assimp x64