FlightGear--64位编译指南

FlightGear–64位编译

血泪总结,供大家相互借鉴

一、环境准备
[FlightGear和SimGear版本要一致]
①FlightGear版本—2019.1.2
②SimGear版本-----2019.1.2
③fg-data版本-------2019.1.2
④下载三方库 3rdParty.x64(注意是64位的)
⑤编译过的OSG库
⑥下载cMake
链接:cMake下载
⑦c++boost库下载
链接:boost下载
(和要编译的FG目标版本一致,这是选择64位)
可自行编译OpenSceneGraph,也可以下载编译过的库
链接:源码下载链接

[需要osg和三方库的可在我上传的资源中下载]
二、构建文件夹
(为了保持和cMakeList一致,随意更改会导致编译错误)
文件夹如下
根目录----选择一个盘下新建FG-x64文件夹
文件夹下新建
在这里插入图片描述
install下新建OpenSceneGraph、SimGear、FlightGear三个文件夹
把自己编译的osg或者下载的编译后的include、lib、bin复制到OpenSceneGraph文件夹下
SimGear和FlightGear下各自新建include和lib文件夹(目前为空)

如果之前没有设置过OSG环境变量这里要设置一下
系统变量的path中添加 : FG\install\OpenSceneGraph\bin

三、开始编译工作
【1】编译SimGear
打开cmake并指定源代码路径和编译路径
在这里插入图片描述
点击 configure
在这里插入图片描述
报错,添加boost路径
在这里插入图片描述
继续 configure
CMAKE_INSTALL_PREFIX 是 VS2015⼯程输出⽬录
选择 FG\install\SimGear
继续 configure
把相关路径都设置完成之后,点击 Generate
在这里插入图片描述
可以 Open Project 对 Simgear 源码编译
注意必须先编译 Simgear 源码,之后才能进⾏ FlightGear 源码的⽣成与 编译

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个错误不知道如何解决,直接去掉这个⽂件,看上去缺少 header⽂件,因为是 test项⽬,直接从 ⼯程中去掉
在这里插入图片描述
再次生成install,到此SimGear编译完成

【2】编译 FlightGear
以上关于Flightgear的步骤其实跟 Simgear是⼀样的,使⽤VS2015编译也是 ⼀样的,如下设置
设置相关路径(关于osg的静态库都用上述环境里提到的编译过的或者下载的,否则多版本会引起版本不兼容导致编译失败)
报错!
在这里插入图片描述
这里是要指定上述编译的SimGear的路径
(install编译就是为了把生成的库复制到指定路径)
在这里插入图片描述
然后再configure还是有warning提示,这里可以搁置不管(只要不是camke error)
然后点击 生成
在这里插入图片描述
在这里插入图片描述
这样就生成成功了
然后打开vs的编译工作
①先Build
在这里插入图片描述
选择 release x64平台
生成后再 install在这里插入图片描述
显示这个界面即编译成功!!!!!!!!!
但是会遇到一些编译问题,整理如下
1/ 常见的基本都是链接失败找不到路径,只需检查项目属性->VC++包含目录和库目录,已经链接器的输入是否含有相关的静态库 .lib
2/LINK : fatal error LNK1104: 无法打开文件“$<1:.obj”
解决方案:找到项目属性->链接器->输入->把1.obj删掉
3/C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: “cmd.exe”已退出,代码为 9009。
解决方案:这里是链接不成功或者编译的库版本不匹配,
4/G:\fg\env\flightgear-2019.1.2\src\Add-ons\AddonManager.cxx : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
c1xx : fatal error C1083: 无法打开源文件: “G:\fg\env\fg-build\src\Main\fgfs_autogen\mocs_compilation.cpp”: No such file or directory
解决方案:这里检查头文件是否包含
5/error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”(mocs_compilation.obj 中)
----------引用的lib库的debug或release版本,与本工程的dubug或release版本不符合
解决方案:这里是因为编译的多线程库不匹配,一定要每一个环节包括simgear,编译的都统一才可以编过,一般vs默认md格式的多线程,
6/ error LNK2019: 无法解析的外部符号 __imp__alDopplerFactor,该符号在函数 “public: virtual void __thiscall SGSoundMgr::init(void)” (?init@SGSoundMgr@@UAEXXZ) 中被引用
解决方案:该错误是在“C++项目属性 ---- 链接器 ----- 输入 ---- 附加依赖项”中,没有输入第三方静态链接库的时候,报错的。需要指明的是,你有时候忘记输入某些lib,工程编译的时候不会报错,而会在链接的时候出错。
7/error C2440: “=”: 无法从“const char [11]”转换为“LPCWSTR”
工程-》设置属性-》配置属性-》常规-》项目默认值-》字符集
解决方案: 原来是Unicode (安装时的默认值)
改为使用多字符集
8/boost库之asio使用出错:
error LNK2001: 无法解析的外部符号 “class boost::system::error_category const & __cdecl boost::system::generic_category(void)” (?generic_category@system@boost@@YAAEBVerror_category@12@XZ)
error LNK2001: 无法解析的外部符号 “class boost::system::error_category const & __cdecl boost::system::system_category(void)” (?system_category@system@boost@@YAAEBVerror_category@12@XZ)
解决方案:
boost安装目录:D:/boost。
找到D:/boost/boost_1_73_0/include/boost-1_73/boost/system/error_code.hpp。
在error_code.hpp文件开头添加宏定义:#define BOOST_ERROR_CODE_HEADER_ONLY。

9/也是我认为比较严重的一个问题
LNK1104 无法打开文件“libboost_system-vc141-mt-gd-x64-1_68.lib”
解析:
一般情况下boost库是不需要编译的,但是报这种错误代表没有链接到你所对应的编译器版本的boost库,这时候两种解决方案
1是网上找别人编译好的boost下载
2是自己编译boost加入相关链接
这里推荐2方案(一次编,一直用)
给出boost编译过程如下
①下载对应环境搭建步骤里边的boost源码解压
(注意源码解压后的目录不能随便移动)
②打开vs的x86工具栏,cd到对应的boost目录,键入bootstrap.bat
③输入
(1)编译所有boost动态库 (release|debug),包括头文件和库文件
bjam --toolset=msvc-14.0 --stagedir=“编译路径” --without-python --build-type=complete link=shared threading=multi install
(2)只编译 release 版本 regex 动态库,包括头文件和库文件
bjam --toolset=msvc-9.0 --stagedir=“编译路径” --with-regex link=shared threading=multi variant=release runtime-link=shared install

(3)只编译 release 版本 regex 动态库,包括库文件

bjam --toolset=msvc-9.0
–stagedir=“编译路径”

–with-regex link=shared threading=multi variant=release runtime-link=shared stage
【注意】: Boost 源代码所在路径最好全英文,不要有空格、特殊字符、中文等
编译要花上30分钟左右(根据PC性能所定), 会在指定生成目录:
stage/install:
stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(D:\boost\boost_1_70_0,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
用的时候把生成的文件夹下的.lib配置到工程即可解决问题
四、配置fgdata,运行起flightgear
找到编译flightgear下的目录,将osg130-osgDB.dll等相关osg的dll复制到fg.exe目录下,然后配置data路径
fgfs设置为启动项
在这里插入图片描述
然后调试fgfs,等待一下,你的小飞机就飞起来啦!!!!!

在这里插入图片描述
个人 qq:506006726

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值