簡體   English   中英

C / C ++中的跨平台兼容性(從Java移植項目)?

[英]Cross platform compatibility in C/C++ (porting a project from Java)?

我在Java / JavaFX中編寫了一個程序,因為我需要跨平台支持。 隨着我的進步,我需要做一些Java中無法實現的低級操作系統網絡操作。 我從Runtime.exec()開始,轉移到JNA / JNI,現在我擔心維護操作系統與Java的兼容性最終會比僅移植到本機應用程序更多。

做這個的最好方式是什么?

我知道GTK +受到* nix和windows的支持,所以我想我會將它用於我的UI。 為每個操作系統維護不同版本的應用程序有多難? 您是否可以建議一個起點來編寫需要跨平台但仍具有低級操作系統訪問權限的東西? 我有很多Java經驗(以及使用OpenGL的大量C ++)但我以前從未關心過任何事情。

或者,是否有一種很好的方法來構建原始數據包,發送ICMP ping以及從Java執行其他低級別網絡任務?

由於您對本機代碼的要求似乎與網絡數據包有關,因此您可以查看JPCAP 注意:JPCAP有兩個分支:一個托管在SourceForge(包net.sourceforge.jpcap.net )上,一個不支持發送,另一個我在這里鏈接(包jpcap ,最初托管在http://netresearch.ics.uci.edu/kfujii )。 我認為這對於大多數“低級”網絡操作來說已經足夠了(包括監聽混雜模式,發送非IP數據報,ICMP等)。

你的問題非常籠統,所以我會在這里列出一些最佳實踐。 如果您相應地編輯您的問題,我可以縮小范圍。

1-導入最多的是編譯器和構建環境。 這可能是微不足道的選擇,所有主要平台都支持ClangGCC 但是,構建環境有點棘手。 只需一個Makefile就不適合所有平台。 相反,去尋找像CMakeSCons這樣的東西。 這將幫助您更輕松地管理源並在所有系統上生成適當的makefile。

2-您可能希望在所有平台上構建相同的GUI。 在這種情況下,您可以使用QtGTK +

3-文件I / O. 如果你有很多文件I / O,你可能想看看Boost文件系統

4-對於您使用的所有其他庫,請確保它們在所有平台上都受支持。 一般來說,我建議使用歷史上維護良好的庫,如Boost

5-最后,使用PIMPL Idiom隱藏平台特定代碼。

如果你想深入研究跨平台C ++編程,這里有一本好書: C ++中的跨平台開發:構建Mac OS X,Linux和Windows應用程序

Qt可能是跨平台GUI的最佳選擇。 如果您想要定位Windows(或Mac),我認為GTK +不是一個很好的選擇。 但是,也許這已經改變了。 我上次檢查已經有一段時間了。 另見這篇文章

Boost和Poco都是很好的跨平台C ++庫。 他們還提供網絡庫(boost asio和Poco Net)。

boostPoco都支持發送ICMP ping請求。

我不確定這些庫是否允許您構建自己的以太網幀和IP數據包。

它更像是設計的東西,

  1. 嘗試在任何可能的地方使用跨平台庫(例如:boost)
  2. 編寫特定於平台的代碼並在其上編寫好的抽象層。

例如:Windows /信令,Linux /信令,信令在這里,

  • Windows / Signaling是Windows平台特定的信令代碼
  • Linux / Signaling是Linux平台特定的信令代碼
  • 信令是平台抽象層,編譯時我們可以決定平台

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM