日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java调用OpenDDS(1)-编译安装openDDS-补上了所有网络上其他文章遗漏的细节

發布時間:2023/12/10 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java调用OpenDDS(1)-编译安装openDDS-补上了所有网络上其他文章遗漏的细节 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java調用OpenDDS過程中踩了很多坑,記錄一下。



提綱
1、DDS簡介
2、DDS協議的實現產品
3、OpenDDS安裝過程



1、DDS簡介

DDS指的是Data Distribution Service,也即數據分發服務,是OMG(Object Management Group,對象管理組織)定義的一個數據傳輸協議。DDS采用發布-訂閱的方式來在兩個通信對象之間傳輸數據,也就是說它基于 DCPS(Data-Centric Publish-Subscribe, 以數據為中心的發布訂閱)模型。

DDS協議定義了一套QoS(Quality of Service,服務質量)進行數據傳輸質量的控制。

DDS看上去和kafka等mq系統、mqtt協議等非常類似,但是仔細研究之后發現它和kafka、mqtt有一個核心的區別,這個核心區別用以下的圖來展示更為清晰:

從這張圖中可以看到,dds中發布者和訂閱者只是通過DDS去發現彼此,當訂閱者發現了自己需要的發布者后,傳輸數據的時候就是他們兩個之間直接傳輸數據,而在kafka或者mqtt中不僅是訂閱者、發布者彼此發現對方通過kafka,而且發布者和訂閱者之間傳輸數據也是通過kafka或者mqtt進行的。這一點是他們之間的關鍵區別,其他方面在概念上都非常類似。



2、DDS協議的實現產品

DDS是一個協議規范,基于這個規范有很多公司做出做了對應的軟件產品,這些軟件產品都實現了DDS協議,主要有以下4種產品:

  • RTI DDS:由美國 RTI 公司開發,支持Windows、Linux、VxWorks等多種操作系統,商用軟件,價格相對較高。目前全球范圍內超過500個項目都應用了RTIDDS,包括航空、航天、船舶、國防、金融、通信、汽車等領域。

  • OpenSplice DDS: 最初由 Thales 開發,在 2006 年被 PT(Prism Technologies)收購,主要的應用在 Tacticos 項目(Thales 的戰斗管理系統)。

  • OpenDDS:由美國OCI公司開發,基于 C++ 實現,是開源軟件。 可從http://www.opendds.org/中獲得幫助,目前最新的版本是OpenDDS 3.12.1。盡管OpenDDS采用C++語言實現,但也提供JAVA和JMS的開發接口,這意味著JAVA程序開發也可以使用OpenDDS。

  • MilSoftDDS: 由土耳其的 MILSOFT Soft-ware Technologies 公司開發的DDS應用軟件。

  • FastDDS:它由 ePromise 公司發布并維護

  • CycloneDDS:它是Eclipse開源的dds方案,



3、OpenDDS安裝過程

安裝OpenDDS需要準備一些基礎軟件,分別是:

  • (1)Perl的編譯器,在windows上可以安裝ActivePerl或者StrawberryPerl,這兩個都是Perl語言的windows編譯器。Perl編譯器的作用是OpenDDS中有很多Perl腳本需要執行。
  • (2)Visual Studio Community 2017,vs主要用來對Tao和OpenDDS進行編譯。
  • (3)JDK8,OpenDDS只支持JDK8,JDK8以后的JDK版本都不支持。

安裝OpenDDS是從源代碼編譯安裝,它沒有二進制的安裝包。編譯安裝過程中需要編譯兩個東西,一個是ACE+TAO,第二個是OpenDDS。這兩個都可以從OpenDDS官網(http://www.opendds.org/)下載到。
安裝的過程其實就是編譯Ace+Tao和OpenDDS的過程。

各個軟件的版本如下:

  • strawberry-perl-5.32.1.1-64bit.msi
  • Visual Studio Community 2017
  • ACE+TAO-6.5.3.zip
  • OpenDDS-3.13.zip


3.1 StrawberryPerl的安裝

Perl本來是Linux下一個腳本編程語言,后來有開發者為Perl做了Windows下的解釋器,所以Perl語言寫的腳本也可以在Windows下運行了,目前據我所知Windows下有兩種perl的解釋器,分別是activePerl和strawberry-perl,這里我們用的strawberry-perl,所以安裝strawberry-perl。

strawberry-perl-5.32.1.1-64bit.msi的安裝就是下一步下一步,沒有特別的設置,很簡單,就不多說了。

安裝完成后,打開cmd,輸入perl -v查看strawberry perl的版本,如果這個命令順利輸出了strawberry perl的版本,說明strawberry perl安裝成功了。



3.2 Visual Studio Community 2017的安裝

visual studio community的安裝也是下一步下一步的,但是中間有一個地方需要注意,如下兩圖所示:

把彈出窗口右邊的滾動條下拉一下,下面還有需要注意的選項:

這一處選擇后,就沒有其他需要注意的地方了,其他都是下一步下一步直到完成,就安裝成功了。



3.3 ACE+TAO的編譯安裝

因為ace+tao和opendds是壓縮包,所以首先解壓。為了統一在一個目錄下工作,于是新建一個目錄E:\dds

將ACE+TAO-6.5.3.zip 和 OpenDDS-3.13.zip 解壓到E:\dds。

進入E:\dds\ACE_wrappers\ace目錄,新建一個文件config.h并添加內容:

#include “ace/config-win32.h”

添加環境變量

下面每一個環境變量都不能少。
我踩過坑的,當時我少寫了幾個環境變量,編譯ace+tao的時候死活過不去,查資料查資料浪費了很多時間走了很多彎路,最后才搞明白,過程中又著急又苦惱,唉,苦不堪言。
最后實在沒辦法,找了一個公司內部搞C++的,結果這哥們來了之后,盲目的拿著鼠標胡擺了幾下,走了,我一看完蛋了,這哥們對openDDS一竅不通,完全不懂,就別指望他了,還是自己繼續苦干吧。
再后來終于找到一個同事,他是懂openDDS的,他也理解我的難處,我一說他就知道我在哪里卡住了,當時困擾了好幾天的苦惱被人一瞬間理解,莫名的產生了一種幸福感,真是有種他鄉遇故知的感動。
在和他反復交流過幾次之后,終于知道問題是少了幾個環境變量,而且他還建議我為了安全起見把perl從activePerl換成strawberryPerl。我被那幾天編譯出錯誤折磨的已經夠嗆了,所以他說啥我聽啥,就馬上卸載了activePerl,下載strawberryPerl,趕緊安裝strawberryPerl,增加環境變量,最后終于把ace+tao給編譯好了。

那一刻,我真是長出了一口氣,感覺天似乎突然明亮了很多,我呆立在原地看了好久那久違的明亮,感覺好像死過的人,重新回到陽間,重見光明一樣,不知道是什么心情,反正是呆呆立了好久,才回過神來。心里難過之余,又痛恨網絡上這些文章的作者不把細節寫清楚,又感慨研發這工作太tm苦了,苦楚無法言說。最令人可恨的是官方網站寫的又簡略又沒有可落地性,官網都說不明白,還搞個球呀,可是任務在身,不搞能行嗎???

寫博客的此時,真是感覺往事不堪回首呀!


ACE_ROOT E:\dds\ACE_wrappers

TAO_ROOT %ACE_ROOT%\TAO

MPC_ROOT %ACE_ROOT%\MPC

DDS_ROOT E:\dds\OpenDDS-3.14

LD_LIBRARY_PATH %DDS_ROOT%\lib

PERL5LIB %DDS_ROOT%\bin\PerlDDS


在Path中添加:中添加:

%ACE_ROOT%\lib

%ACE_ROOT%\bin

%DDS_ROOT%\lib

%DDS_ROOT%\bin

編譯ACE和TAO
進入到%ACE_ROOT%目錄下,可以看到有幾個類似于ACE_vs2017.sln的文件,因為我們安裝的是VS2017,所以我們用visual studio打開ACE_vs2017.sln,然后依次執行“項目-重新解決方案目標”和“生成-生成解決方案”兩個命令,這兩個命令都成功執行后,就表示ace編譯成功了。

進入到%ACE_ROOT%\TAO目錄下,可以看到有幾個類似于TAO_ACE_vs2017.sln的文件,同理因為我們安裝的是VS2017,所以我們用visual studio打開TAO_ACE_vs2017.sln,同樣依次執行“項目-重新解決方案目標”和“生成-生成解決方案”兩個命令,這兩個命令都成功執行后,就表示tao_ace編譯成功了。



3.4 OpenDDS的編譯安裝

了讓OpenDDS支持Java,需要將%JAVA_HOME%\include中的jni.h文件和%JAVA_HOME%\include\win32中的jawt_md.h、jni_md.h復制到Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC下各個版本SDK的include下,以防止編譯時找不到這些文件。

進入到%DDS_ROOT%目錄下,打開configure文件,找到420行,在420行下面添加下面一行代碼:

$opts{‘compiler_version’} = “vs2017”;

用VS2017的開發人員命令提示符,進入%DDS_ROOT%目錄,執行./configure --java。

執行后生成了DDS.sln和setenv.cmd兩個文件,在命令行執行setenv.cmd設置環境變量。

用Visual Studio 2017 打開 DDS.sln。

打開DDS.sln后,在Visual Studio 2017的解決方案管理器中會看到,這個DDS解決方案包含很多個項目,其中有一個項目Messager_Minimal_Idl是默認選中的。

此時,右鍵此項目,打開屬性窗口,配置屬性 > VC++目錄 > 常規 > 包含目錄中添加

E:\dds\OpenDDS-3.13
E:\dds\ACE_wrappers
E:\dds\ACE_wrappers\TAO


如上圖在紅色線標出來的位置添加以上的3個目錄。

最后,一切設置完畢后,開始編譯了。
依次執行“項目-重新解決方案目標”和“生成-生成解決方案”兩個命令,這兩個命令都成功執行后,就表示openDDS編譯成功了。一般而言按照我的步驟設置之后,肯定會成功的,如果有例外沒有成功的,我也沒辦法,自己看著辦吧。

3.5 測試OpenDDS的編譯是否成功

進入%DDS_ROOT%\java\tests下,這個tests目錄中存放的都是java編的dds示例程序,有好多,如下圖所示:

網上說進入到這個目錄后,就開始執行run_test.pl,網上這些說法都是忽略了中間步驟的,不知道是故意搗鬼還是無意的,反正你直接從tests目錄下是找不到run_test.pl的。

因為java/tests/下每一個文件夾都是一個java調用dds的示例程序,而且每一個文件夾下都有run_test.pl,究竟應該執行哪一個呢?

我是進入了messager目錄執行了run_test.pl,最后命令執行完,輸出了test passed,我知道成功了。

執行run_test.pl命令后,會輸出很多東西,但是等一會兒,最后會出現test passed:

這就是編譯工作完全成功了。



參考資料:

1、https://blog.csdn.net/wyc12306/article/details/79577292
2、https://blog.csdn.net/zhuwinmin/article/details/117077587
3、https://download.objectcomputing.com/OpenDDS/OpenDDS-latest.pdf,OpenDDS的開發指南
4、https://www.icode9.com/content-4-173582.html





總結

以上是生活随笔為你收集整理的Java调用OpenDDS(1)-编译安装openDDS-补上了所有网络上其他文章遗漏的细节的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。