转自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的更多相关文章

  1. VS2015编译boost1.62

    VS2015编译boost1.62 Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有 ...

  2. VS2015编译Qt5.7.0生成支持XP的静态库(很不错)

    一.编译工具 1.VS2015 编译Qt5.7.0的所需VS版本:Visual Studio 2013 (Update1)或Visual Studio 2015 (Update2).因为Update补 ...

  3. 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 ...

  4. 用VS2015编译sqlcipher

    简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌 ...

  5. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  6. VS2015编译FFMPEG,修改FFmpeg缓冲区大小解决实时流解码丢包问题,FFmpeg错误rtsp流地址卡死的问题,设置超时

    之前尝试过很多网上利用Windows编译FFmpeg的文章,都没有办法编译X64位的FFmpeg,有些教程中有专门提到编译64位的FFmpeg需要下载mingw-w64-install,但是编译的过程 ...

  7. vs2015编译caffe

    有些时候,需要在python3的环境下import caffe,需要用vs2015在python3的环境下,编译pycaffe. microsoft的windows版本的caffe,依赖的库Nuget ...

  8. 使用VS2015编译xlslib库

    环境: win7_x64,VS2015 开始: 一.下载xlslib库 xlslib-package-2.5.0.zip 解压到一个指定目录,如E:\library\xlslib-package-2. ...

  9. vs2015 编译时项目出现NuGet程序包还原失败,找不到xxx.xxx.xxx版本的程序包,怎么解决这个问题?

    vs2015 编译时出现这个NuGet程序包还原失败问题,项目还是运行得了,就是每次看到错误列表中有很多个错误,就感觉不舒服. 总算被我找到解决方法了 问题截图:

随机推荐

  1. 有登陆认证的情况下如何使用Wisdom RESTClient?

    访问REST API时,很多系统需要登陆认证,登陆成功以后才允许访问API.下面介绍一下有登陆认证情况下如何使用 Wisdom RESTClient测试API的方法. 方法很简单即在浏览器上成功登录系 ...

  2. Spring Boot 实现RESTful webservice服务端实例

    1.Spring Boot configurations application.yml spring: profiles: active: dev mvc: favicon: enabled: fa ...

  3. JDK常用命令(三)jmap

    jmap jmap,Java Memory Map.主要用于打印指定Java进程(或核心文件.远程调试服务器)的共享对象内存映射或堆内存细节. jmap命令可以获得运行中的jvm的堆的快照,从而可以离 ...

  4. log4j2配置推荐

    <?xml version="1.0" encoding="UTF-8"?> <!-- monitorInterval为监听配置变化的间隔,3 ...

  5. spring List,Set,Map,Properties,array的配置文件注入方式

    虽然不多,但是有时候在实现的时候,我们还是希望某些参数或者属性通过集合()的方式注入进来,比如配置表参数列表,addresslist,亦或是三方库等等.因为这种改动不是很多,经常一时想不起来,今天做个 ...

  6. 观实验室PPT演讲有感

    outline 一定要有 说话的语速要慢,压制住紧张的心情 提前一天发布PPT dont` argue with audience, especially professor and teachers ...

  7. intel webrtc 部署

    org link conference server Configure the MCU server 1. set the maximum numbers of open files, runnin ...

  8. Loader

    1.定义 可以把Loader当做一个占位符,即占有屏幕的某一个空间,当加载了组件之后,这个空间就能显示相应的图形了.所以可以给Loader设置anchor布局 2.加载组件 source:加载QML文 ...

  9. Bootstrap3基础 input-group glyphicon 输入框组与glyphicon图标

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  10. bzoj 3437 小p的农场

    bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...