查看: 7856|回复: 4

FlightGear编译小结

[复制链接]
发表于 2014-2-25 19:14:27 | 显示全部楼层 |阅读模式

当决定要编译flightgear时,第一件要做的事情是确定要编译的FlightGear是什么版本,然后决定别的依赖库采用什么版本。这里我选择FlightGear 1.9.1,需要使用Simgear 1.9.1来编译FlightGear 1.9.1,OpenSceneGraph的版本是2.8.1,plib的版本必须是1.8.5或者以上。当确定了这些以后,我们就需要知道这些依赖库放置在哪里才能使得编译FlightGear时能够找得到,此时可以参考网上的一些例子,但是更好的方法是打开FlightGear源代码里面的解决方案文件,例如我打开FlightGear 1.9.1源代码里面的FlightGear.sln(flightgear/projects/VC8):

FlightGear编译小结-3650

就只有4个项目。右击FlightGear查看其属性->C/C++->常规,有一个附加包含目录:

FlightGear编译小结-8041 看看这些值,就知道应该把依赖库的包含文件放在哪里。当然我们也可以改变这些值,然后再把包含文件放在相应改变后的位置,只要编译时找得到就OK。同时还有链接时的依赖库的lib文件的位置(属性->链接器->常规):

FlightGear编译小结-4187 这样在出现问题时就不会担心是不是因为把相关文件放错位置了。

真正开始编译时,所谓的顺序其实就是先把相关包含文件和lib文件编译出来,这样在编译FlightGear 1.9.1时不会出现编译错误以及后面的生成阶段时不会出现链接错误。查看属性->链接器->输入:

FlightgearLib.lib
Simgear.lib
fnt.lib
js.lib
net.lib
psl.lib
puAux.lib
pui.lib
pw.lib
sg.lib
sl.lib
ul.lib
osgDBd.lib
osgGAd.lib
osgViewerd.lib
osgUtild.lib
osgParticled.lib
osgTextd.lib
osgd.lib
OpenThreadsd.lib
libjpeg.lib
pthreadvc2.lib
Alut.lib
openal32.lib
glu32.lib
opengl32.lib
winmm.lib
zlib.lib
wsock32.lib
advapi32.lib
comdlg32.lib
shell32.lib
user32.lib

我们一个任务是要凑集这些lib文件,这就是那些依赖的库。FlightGearLib.lib与Simgear.lib就是上面4个项目中其中二个项目做的事情。而fnt.lib到ul.lib的文件是属于plib的,所以就开始编译plib吧,版本是1.8.5。然后接下来以osg开头的以及OpenThreadsd.lib都是OpenSceneGraph的,后面都有一个d说明是debug版本,没有d是release版本,然后是libjpeg.lib,这是需要单独编译的,不过如果不怕也可以直接从网上搜索下载,pthreadvc2.lib也是如此,我就是直接从网上搜索下载回来的,alut.lib、openal32.lib、opengl32.lib、zlib.lib也是需要专门编译,都是相互独立的库。编译链接时需要这些就够了,但是如果要能够运行起来,还需要path指向相关的dll文件,这些文件是编译相关库产生的,把路径追加到PATH变量就好了。

最后编译FlightGear时,有一个事项要阐述一下。就是工程里面有些文件在磁盘上是不存在的,此时就会报c1xx错误,消除这些错误就是在工程里面把相关文件删除,然后链接时就有许多的”找不到符号”的错误,这是因为磁盘上有该文件,只是没有加到工程里面来,所以就根据符号找到定义它的文件,然后加到工程里面来,最后需要忽略msvcrt.lib、libcmt.lib这两个库文件,到这里你就可以飞起来了。

希望给编译FlightGear的朋友们一点帮助。如有疑惑,欢迎交流,倘有错误之外,恳请指正。


发表于 2014-4-17 16:54:20 | 显示全部楼层
看贴回复捞积分
既学习又高兴
发表于 2014-6-26 12:06:48 | 显示全部楼层
感谢分享,正好再写
发表于 2018-4-21 16:58:27 | 显示全部楼层
原来用了P3D是这种效果
发表于 2018-6-5 10:08:11 | 显示全部楼层
这两天终于把最新版的编译出来了,跟之前有很大变动
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表