QQ登录

只需一步,快速开始

查看: 6133|回复: 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 (12.12 KB, 下载次数: 431)

11111111.jpg

22222222.jpg (4.72 KB, 下载次数: 461)

22222222.jpg
分享到: QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0

主题

好友

59

积分

航院新生

沙发
发表于 2012-5-7 21:34:51 |只看该作者
本文为转载,感谢原创,本人正在尝试编译
回复

使用道具 举报

主题

好友

9

积分

报考学院待录取

板凳
发表于 2018-8-21 19:47:26 |只看该作者
很详细,谢谢楼主~学习一下!
回复

使用道具 举报

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

本版积分规则

手机版|联系我们| FlightGear ( 吉ICP备19002044号-7 )

GMT+8, 2024-4-25 11:36

Powered by Discuz! X3.2

© 2001-2013 FlightGear Inc.

返回顶部