[转][JSBSim]使用VS2015编译JSBSim
转自csdn
原文:https://blog.csdn.net/yu_lei_/article/details/81463187
请大家去看原文,原文有图片和资源,本文仅供本人参考
权威参考:http://jsbsim.sourceforge.net/Building_JSBSim_with_Visual_Cpp.pdf
另外附上此作者的相关博客
JSBSim使用教程
JSBSim编程实践
1.说明
最近在研究JSBSim的代码,首先百度了一些JSBSim相关的文档和教程,有一篇《Building_JSBSim_with_Visual_Cpp_2010》讲了如何利用VS2010编译JSBSim,参考这个教程编译完成了一个JSBSim工程。但是这个工程是好多年以前的了,在GitHub上下载的最新JSBSim工程已经无法使用VS2010来编译了,所以就用VS2015将JSBSim最新的代码编译了一遍,其中配置内容和VS2010略有不同,所以记录下来,以便参考。
2.代码下载
JSBSim项目的代码下载地址如下:
Sourceforge下载地址:https://sourceforge.net/p/jsbsim/code/ci/master/tree/
GitHub下载地址:https://github.com/JSBSim-Team/jsbsim/tree/master
其中Sourceforge下载地址打开如下图,在右侧的JSBSim版本分支中有三个,分别是master、SG_Path和major_refactor,三个分支应该是不同时期的JSBSim版本,其中master应该是比较新的版本,下载后可以使用VS2015进行编译。
根据SourceForge上的消息,JSBSim在2018年5月份开始迁移到GitHub上了,所以目前JSBSim项目的维护应该是在GitHub上进行着,如果要接触最新的JSBSim代码,可以考虑在GitHub上关注这个项目。
3.编译成可执行文件
下载得到JSBSim工程包,解压后打开sln文件,最新的JSBSim工程中sln文件只能用VS2015以上的版本才能打开,打开后的界面如下:
目前这个解决方案中包含了三个工程,第一个项目aeromatic是生成飞行器配置xml文件的工具,第三个工程prep_plot是辅助画图的工具,在此我们重点关注JSBSim工程。
在JSBSim工程在编译前需要进行相应的配置,配置和测试步骤如下:
Step1.右击JSBSim工程,选择属性,打开工程属性页
Step2.点击配置管理器按钮,进入配置管理器页面,选择相应的活动平台解决方案。其中的x64解决方案平台是为了编译成64位应用程序而使用的,而x86应用程序是为了编译成32位应用程序而使用的。在此处我们选择x86平台,解决方案配置选择Release。
Step3.关闭配置管理器页面后,在配置属性->调试页面下的命令参数一栏输入“--script=scripts\c1723.xml --outputlogfile=c1723.csv”,这是为了方便调试所输入的命令参数。
Step4.在配置属性 -> C/C++ -> 代码生成 -> 运行库一栏,设置运行库为多线程(/MT),这样设置的目的是将VS2015的运行时库作为lib链接到应用程序中,程序可以在没有安装VS2015的环境中运行。
Step5.编译程序,右击工程选择生成或者按F7即可开始编译工程,等待几分钟应该就可以编译成功了。
Step6.在成功编译之后,我们可以在工程的Release目录下找到JSBSim.exe,接下来可以运行测试。可以通过VS2015来运行JSBSim.exe,结合之前设置的命令行参数,在菜单栏选择调试->开始执行(不调试)或者按Ctrl+F5即可运行;也可以在工程目录下输入命令行指令来执行。为了方便,我写了一个批处理脚本进行测试,脚本内容如下:
del -Q c1723.csv
Release\JSBSim --script=scripts\c1723.xml --outputlogfile=c1723.csv
pause
执行效果如下图,同时在工程目录下会生成C1723.csv文件,该文件以表格的形式记录下了仿真过程中的所有数据,可以用来进行分析画图或者Replay。
4.编译成静态库
面向对象的强大之处在于代码重用很方便,但是我们没法每次都添加这么多的JSBSim源代码到我们自己的工程之中,所以考虑将JSBSim的代码编译成静态库来使用,这样每次只需添加JSBSim的静态库就可以复用其中已有的许多轮子了。编译配置过程如下:
Step1.打开JSBSim工程属性页,在此之前,我们应该已经在配置管理器中配置好了要编译的平台版本了,此处选择的编译平台是Release Win32。接着在常规->配置类型一栏,将编译目标从应用程序(.exe)改为静态库(.lib)。
Step2.接着切换到C/C++ -> 预处理器 -> 预处理器定义一栏,选择编辑,打开预处理器定义编辑页面,在最后一行输入XML_STATIC,这是为了在工程中预先给出XML_STATIC的宏定义,从而将XML工具相关的API导出
Step3.在属性页的C/C++ -> 代码生成 –> 运行库一栏设置为多线程 (/MT)
Step4.在右侧工程目录栏中,找到JSBSim.cpp文件,右击选择移除,因为我们的静态库不需要使用main函数。
Step5.编译成功之后,就可以在工程目录下Release目录下找到编译完成的JSBSim.lib,这就是我们所得到的静态库,接下来对我们的静态库进行测试。
Step6.首先在VS2015中新建一个工程,将该工程设置为空项目,命名为JSBSimLibTest。由于VS2015在创建新项目时将.sln文件和. .vcxproj文件分开放了,我们将其移到同一目录下,并在sln解决方案中重新添加工程文件。
Step7.拷贝JSBSim工程目录下的src文件夹和JSBSim.cpp到JSBSimLibTest工程目录中,同时将我们之前编译好的JSBSim.lib拷贝到src目录中。虽然我们已经不需要JSBSim的源代码了,但是头文件还是需要的。而JSBSim.cpp则是我们用来对静态库进行测试的调用代码,看其能否实现在原工程中同样的功能。
Step8.在JSBSimLibTest工程上右击->添加->现有项,打开文件选择窗口,选择JSBSim.cpp文件。此时可以在IDE中看到添加后的文件提示了许多错误,这是因为我们还没有配置头文件包含目录以及依赖库的关系。
Step9.打开属性配置页面,然后打开配置管理器,配置要编译的工程目标为Release,平台选择Win32,这是为了和我们之前编译静态库时的配置相统一,以免编译出错。
Step10.在工程属性页 -> C/C++ -> 常规 -> 附加包含目录一栏,点击编辑,打开附加包含目录编辑页面,输入两个附加包含目录,分别是“$(ProjectDir)src”和“$(ProjectDir)src\simgear\xml”,这样编译时工程就能够找到相应的头文件了。
Step11.在工程属性页 -> C/C++ -> 代码生成 –> 运行库一栏,设置运行库和静态库一样的多线程 (/MT)。
Step12.在工程属性页 -> 链接器 -> 附加库目录一栏,添加一个附加库目录“$(ProjectDir)src”,接着在工程属性页->链接器->输入->附加依赖项一栏添加一个附加依赖库“JSBSim.lib”,这样我们就将之前编译得到的JSBSim.lib添加到我们的工程中了。
Step13.编译JSBSimLibTest工程,编译成功之后我们就得到了一个JSBSimLibTest.exe可执行文件,这个文件应该是可以实现和JSBSim.exe相同的功能的,可以运行测试一下,测试成功就说明我们编译的静态库是可用的。
5.总结
这篇使用说明是参考《Building_JSBSim_with_Visual_Cpp_2010》写的,目的是作为简要的参考,在编译和执行JSBSim的过程中也遇到的一些问题,在此进行简要说明。
编译平台选择x64和x86的区别
VS2015可以选择将应用程序编译成x64位目标机程序和x86 32位应用程序,之前没有尝试过x64位应用程序的编译,相比于32位应用程序,64位程序应该在性能上有所提升,但是32位程序同样可以在64位的机器上运行,相对来说兼容性更好一些,可以按需选择。
Debug/Release模式的区别
Debug模式相对于Release模式在编译时减少了很多优化选项,这样做牺牲了一部分的性能换来的调试的方便,在之前测试JSBSim.exe运行时,Release编译得到的应用程序运行明显更快,显然优化是很有效果的。要发布应用程序时还是选Release好了。
运行时库MT/MD
在之前的项目中就遇到过相关的问题,具体内容可以自行百度,可以参考《你所不知道的C和C++运行库》,本文在编译时选择MT,主要是为了减小应用程序对VS2015的依赖,可以在其他环境中独立运行。
静态库添加到低版本工程中
之前干过这样的事,将VS2010编译的静态库或者动态库在VC6.0的工程中使用,还是可以用的。同样将VS2015编译的静态库给VS2010或者VC6.0应该也是可以用的,可以尝试一下。
JSBSim的用处和使用方法
面向对象的代码是可以复用的,我们有了JSBSim.lib和相关的头文件,那么就可以在自己的工程中复用相关的代码了。不过JSBSim中的各个轮子还有待研究,如果以后有需要,就可以利用其中的代码实现自己的功能了。
[转][JSBSim]使用VS2015编译JSBSim的更多相关文章
- VS2015编译boost1.62
VS2015编译boost1.62 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有 ...
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...
- Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)
Win7 64位系统下通过VS2015编译好的最新的OpenSSL(1.0.2j)所有八个版本的链接库, 包含以下八个版本: 1.32位.debug版LIB: 2.32位.release版LIB: 3 ...
- 用VS2015编译sqlcipher
简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌 ...
- 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...
- VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时
之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...
- vs2015编译caffe
有些时候,需要在python3的环境下import caffe,需要用vs2015在python3的环境下,编译pycaffe. microsoft的windows版本的caffe,依赖的库Nuget ...
- 使用VS2015编译xlslib库
环境: win7_x64,VS2015 开始: 一.下载xlslib库 xlslib-package-2.5.0.zip 解压到一个指定目录,如E:\library\xlslib-package-2. ...
- vs2015 编译时项目出现NuGet程序包还原失败,找不到xxx.xxx.xxx版本的程序包,怎么解决这个问题?
vs2015 编译时出现这个NuGet程序包还原失败问题,项目还是运行得了,就是每次看到错误列表中有很多个错误,就感觉不舒服. 总算被我找到解决方法了 问题截图:
随机推荐
- Java开发万年历
自己做出来的万年历: 以下代码: public class Test2 { public static void main(String[] args) { Scanner sc = new Sca ...
- Linux环境jdk的安装
1.下载jdk1.7,oracle的下载地址已经失效,找了个其他的地址进行下载. wget http://pc.xzstatic.com/2017/03/jdk7u79linuxx64.tar.gz ...
- 标准库 svc—程序及服务控制
对于程序及服务的控制,本质上而言就是正确的启动,并可控的停止或退出.在go语言中,其实就是程序安全退出.服务控制两个方面.核心在于系统信号获取.Go Concurrency Patterns.以及基本 ...
- spring使用@Autowired为抽象父类注入依赖
有时候为了管理或者避免不一致性,希望具体服务统一继承抽象父类,同时使用@Autowired为抽象父类注入依赖.搜了了网上,有些解决方法实现实在不敢恭维,靠子类去注入依赖,那还有什么意义,如下: 父类: ...
- sublime3 快速创建html模板
1 安装 Package Control1.1 ctrl + ` 呼出控制台1.2 复制(不要带最外层的双引号,该代码仅适用于sublime text 3)“import urllib.request ...
- zabbix配置短信告警
zabbix版本:3.0.7 短信服务商:云片网 首先在云片网添加相应签名和模板 参照格式 签名:xxx告警 模板: [xxx告警]故障:#status# 服务器:#host# 发生:#trigger ...
- php 带省略号的分页
原文链接:https://blog.csdn.net/u011060253/article/details/25308455 $curpage = isset($_GET[; $page = new ...
- python脚本解析json文件
python脚本解析json文件 没写完.但是有效果.初次尝试,写的比较不简洁... 比较烦的地方在于: 1,中文编码: pSpecs.decode('raw_unicode_escape') 2,花 ...
- lnmp部署知乎出现403
查看错误日志: [root@web01 /]# tailf /var/log/nginx/error.log 2019/01/16 19:02:06 [error] 10023#10023: *8 ...
- if语句学习
#print("您好,我叫周星驰") ''' x=1+2+3 print(x*4) print(x**x) a=input("请输入相应的数字a") a=int ...