请选择 进入手机版 | 继续访问电脑版

QQ登录

只需一步,快速开始

查看: 2737|回复: 2

FlightGear 2.0.0 在 VS2008 SP1下的编译

[复制链接]

主题

好友

59

积分

航院新生

发表于 2012-5-7 21:34:11 |显示全部楼层
1、  构建一个目录x:\FlightGear,X是非中文的路径。

2、  到FlightGear的 网站http://www.flightgear.org/Downloads/source.shtml下载FlightGear源代码FlightGear-2.0.0.tar.gz,解压到x:\FlightGear。

3、  FlightGear需要的依赖库除了OSG还有simgear、boost、plib、OpenAL、Glut(FreeGlut)。

4、  在http://www.simgear.org/下载simgear2.0.0,版本一定 要和FlightGear对应。解压到X:\FlightGear\SimGear下,不能是其它目录,因为SimGear是在FlightGear的解决方案中编译。

5、  运行VS2008,打开FlightGear2.0.0\ projects\VC90\FlightGear.sln,你会发现simgear已经包含在解决方案中了,而且和FlightGear的依赖项目。

6、  参考FightGear项目的debug版本配置属性->linker->input中内容,得到FightGear需要的库:

1)  opengl32.lib glu32.lib winmm.lib wsock32.lib 是vs2008自带的;

2)  sg_d.lib、net_d.lib、pui_d.lib、puaux_d.lib、fnt_d.lib、js_d.lib、ul_d.lib属于Plib库;

3)  OpenAL32.lib、ALut.lib属于OpenAL库.

4)  osgd.lib、osgDBd.lib、osgUtild.lib、osgViewerd.lib、osgGAd.lib、osgTextd.lib、osgParticled.lib、OpenThreadsd.lib属于OSG库。

5)  zlibd.lib是压 缩库、libjpegd.lib是处理jpg图形文件的库。

6)  boost库不是以lib的形式引入的,



除了windows自带库外,其它库的路径在linker->General->Additional Library Directory中设置的,我的是:..\..\..\..\install\msvc90\OpenSceneGraph\lib和..\..\..\..\3rdParty\lib。..\表示当前目录的上一级目录。..\..表示当前目录向上推两级目录,依次类推。我的项目当前的目录是x:\FlightGear\FlightGear-2.0.0\projects\VC90,因此,我们需要在x:\FlightGear下构建install\msvc90\OpenSceneGraph\lib和3rdParty\lib这样的目录结构。

再看这些库的头文件和源文件,它们是在项目debug版本配置属性C/C++-> General->Additional Include Directory中设置的,我的是:


因此,我们需要在x:\FlightGear下构建install\msvc90\OpenSceneGraph\include3rdParty\includeboost_1_39_0这样的目录结构。x:\FlightGear下的目录如下图。
下面该轮到真正的主角FlightGear了。
1、  构建一个目录x:\FlightGear,X是非中文的路径。
2、  到FlightGear的 网站http://www.flightgear.org/Downloads/source.shtml下载FlightGear源代码FlightGear-2.0.0.tar.gz,解压到x:\FlightGear。
3、  FlightGear需要的依赖库除了OSG还有simgear、boost、plib、OpenAL、Glut(FreeGlut)。
4、  在http://www.simgear.org/下载simgear2.0.0,版本一定 要和FlightGear对应。解压到X:\FlightGear\SimGear下,不能是其它目录,因为SimGear是在FlightGear的解决方案中编译。
5、  运行VS2008,打开FlightGear2.0.0\ projects\VC90\FlightGear.sln,你会发现simgear已经包含在解决方案中了,而且和FlightGear的依赖项目。
6、  参考FightGear项目的debug版本配置属性->linker->input中内容,得到FightGear需要的库:
1)  opengl32.lib glu32.lib winmm.lib wsock32.lib 是vs2008自带的;
2)  sg_d.lib、net_d.lib、pui_d.lib、puaux_d.lib、fnt_d.lib、js_d.lib、ul_d.lib属于Plib库;
3)  OpenAL32.lib、ALut.lib属于OpenAL库.
4)  osgd.lib、osgDBd.lib、osgUtild.lib、osgViewerd.lib、osgGAd.lib、osgTextd.lib、osgParticled.lib、OpenThreadsd.lib属于OSG库。
5)  zlibd.lib是压 缩库、libjpegd.lib是处理jpg图形文件的库。
6)  boost库不是以lib的形式引入的,
除了windows自带库外,其它库的路径在linker->General->Additional Library Directory中设置的,我的是:..\..\..\..\install\msvc90\OpenSceneGraph\lib和..\..\..\..\3rdParty\lib。..\表示当前目录的上一级目录。..\..表示当前目录向上推两级目录,依次类推。我的项目当前的目录是x:\FlightGear\FlightGear-2.0.0\projects\VC90,因此,我们需要在x:\FlightGear下构建install\msvc90\OpenSceneGraph\lib和3rdParty\lib这样的目录结构。
再看这些库的头文件和源文件,它们是在项目debug版本配置属性C/C++-> General->Additional Include Directory中设置的,我的是:
因此,我们需要在x:\FlightGear下构建install\msvc90\OpenSceneGraph\include3rdParty\includeboost_1_39_0这样的目录结构。x:\FlightGear下的目录如下图。
7、  将x:/osg/ OpenSceneGraph-2.9.7/include下的所有文件和文件夹拷贝到x:\FlightGear下的install\msvc90\OpenSceneGraph\include目录中,将x:/osg/ OpenSceneGraph-2.9.7/lib中的所有lib文件拷贝到install\msvc90\OpenSceneGraph\lib中。
8、  从http://www.boost.org/下载boost库,注意FlightGear要求的boost库的版本。我用的是1.42.0。下载后解压缩到boost_1_39_0中。
9、  从http://plib.sourceforge.net/下载Plib库。注意FlightGear要求的PLib库的版本。我用的是1.8.5。我解压到x:\Plib下。里面有VC6的工程文件,用VS2008打开,转换为VC9.0的。使用批构建编译Plib的debug和release版本。注意:在构建 前,一定要将Plib中的每个项目使用的C/C++运行库版本设置为Multi-threaded Debug DLL (Debug版本)或Multi-threaded DLL (Release版本)。因为FlightGear、OSG、Simgear、OpenAL等都是这么设置。如果出现不同的C/C++运行库版本,链接时会有警告。将编 译好的Plib各个库文件拷贝到x:\FlightGear\3rdParty\lib,x:\Plib下的头文件拷贝到x:\FlightGear\3rdParty\include下。
10、我在http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx下载的OpenAL和Alut。OpenAL的版本是1.11.753,符合FlightGear2.0.0的要求。Alut我下载的是freealut-1.1.0-bin,解压缩后文件夹中包括了include文件夹、alut.lib和alut.dll。将include中的内容拷贝到x:\FlightGear\3rdParty\include下,将alut.lib拷贝到x:\FlightGear\3rdParty\lib中。OpenAL我下载的是openal-soft-1.11.753-bin,解压后的文件夹中包括include文件夹、lib文件夹。将include文件夹中内容全部拷贝到x:\FlightGear\3rdParty\include中,将lib文件夹下的libOpenAL32.dll.a拷贝到x:\FlightGear\3rdParty\lib中,并改名为OpenAL.lib。然后下载oalinst.zip,解压后运行oalinst.exe,将OpenAL.dll安装在系统目录下。
11、zlibd.lib和libjpegd.lib使 用了编译OSG时用到的了第三方库。将有关的头文件和库文件拷贝到x:\FlightGear\3rdParty对 应的目录下就可以了。zlibd.lib的头文件包括zlib.h、zconf.h,libjpegd.lib的头文件包括jpeglib.h、jmorecfg.h、jerror.h、jconfig.h。
12、  现在终于可以 编译FightGear了。编译时会出现一些警告,不要理会。
13、  运行FightGear,需 要许多DLL,OSG编译出来的DLL在x:/osg/ OpenSceneGraph-2.9.7/bin,OSG需要的DLL在x:\osg\3rdParty\bin下面。Zlib和libjpeg也在x:\osg\3rdParty\bin下面。OpenAL和Alut的DLL见10。


编译出来的debug版的FightGear运行及其缓慢,帧率都不到10,还不稳定。开始我以为是OSG没有编译好,就用Geoff McLane提供的OSG库和第三方库编译FightGear,但试了多次,都没有成功,经常出现符号无法解析的链接错误。后来重新编译OSG,并且将OSG的例子也编译了。 试了几个OSG的例子,运行正常。最后,重新编译Release版本的OSG、Plib和FightGear。运 行后发现帧率稳定在30左右,和FightGear网站上的安装版效果一样,和Geoff McLane编译出来的效果也一样。
OpenAL、Alut可以通过Cmake生成工程文 件,然后编译。这部分我没有尝试。
如果觉得构建install\msvc90\OpenSceneGraph\lib这样的目录比较麻烦,也可以在FlightGear直接设置第三方库的头文件、lib文件文件所在的路径。


另外,编译中出现LNk4089错误时,是由于C/C++运行时库出现冲突引起的。可以忽略引起冲突的库。下面的表来自网络。
To use this run-time library
Ignore these libraries
Single-threaded (libc.lib)
libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib)
libc.lib, msvcrt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib)
libc.lib, libcmt.lib, libcd.lib, libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib)
libc.lib, libcmt.lib, msvcrt.lib, libcd.lib, libcmtd.lib


11111111.jpg
22222222.jpg

主题

好友

59

积分

航院新生

发表于 2012-5-7 21:34:51 |显示全部楼层
本文为转载,感谢原创,本人正在尝试编译
回复

使用道具 举报

主题

好友

9

积分

报考学院待录取

发表于 2018-8-21 19:47:26 |显示全部楼层
很详细,谢谢楼主~学习一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入FG

本版积分规则

手机版|联系我们| FlightGear ( 京ICP备10014305号 )

GMT+8, 2019-10-17 03:28

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部