Liunx java-eclipse下C++的so庫的調用(下)__C++

來源:互聯網
上載者:User

前面對LINUX下打SO庫進行了介紹。

這一章,將對WIN平台上編譯C++打包SO庫進行介紹,其實這個和LINUX下一樣的操作,為什麼要對WIN平台的介紹,是因為我在WIN平台打包碰到了問題,其次是我未使用過LINUX系統,習慣了WIN平台。好,不說廢話了。

 

WIN32平台:

準備工作(版本可自選):

XP + JDK1.6

cygwin 最新版裝:ubunit,g++,gcc,gdb (其中g++,gcc已升到4.5.3版,預設裝好的是3.4.4)

swig :2.0.4

 

其中的.h和.cpp及.i檔案請見上集中的interfacecar.h和interfacecar.cpp和cplus.i檔案。

 

將以上檔案放到同一個目錄下,這個目錄最好不要使用帶空格的及中文的路徑目錄。如果有中文的可以使用subst來進行映射成其它盤符(嘿嘿通常我都這麼搞)。

或都使用\來將空格進行轉議如/cygdrive/c/program\ files/.... 中間的空格就使用\來轉議

 

準備工作OK。

 

1、使用SWIG將.i檔案編譯為JAVA檔案。(我的檔案路徑:f:\so\socplus)

[如果未設定環境變數的,必須先cd進入到swig目錄]

swig -c++ -java f:\so\socplus\cplus.i

 

將產生.java和xxx_wrap.cxx檔案

 

有了xxxx_wrap.cxx檔案,就可以打SO庫了。

2、先把.cpp和cxx檔案編譯為.o檔案。

先cd進入到相應的目錄,注cygwin的目錄需要使用/cygdrive/進行映射

g++ -Wall -c interfacecar.cpp cplus_wrap.cxx  

說明:

這命令是不是像LINUX下的呀,有些人對比了一下,怎麼沒有串連jni.h和jni_md.h標頭檔啊。原因是因為我的JDK裝在了D:\program files\java下了,大家注意這個program files這個目錄中有一個空格如果使用-I/cygdrive/d/program files/java/...時會提示找不到files/java/....明白為什麼不用空格路徑的原因了吧。嘿嘿,不要緊張,還是有解決辦法的。到Cygwin目錄搜一下jni.h和jni_md.h,把你的JDK中的jni.h和jni_md.h考過來替換即可解決(為什麼要替換是因為我的Swig 匯出的xxx_wrap.cxx用的是JDK1.6而我的cygwin中內建的jni不是這個版本的,所以衝突)。

 

找不到jni或版本不對的jni.h時,報錯:

 

編譯後產生兩個.o檔案;

 

3、將.o檔案打包為so庫檔案。

g++  -shared -fpic  interfacecar.o  cplus_wrap.o  -o  libcp.so

這個跟LINUX命令沒有什麼區別,一樣的。

 

OK,打包完成。

以上為WIN平台打包完成。

 

測試:

將.so和.JAVA檔案全部丟到LINUX平台下進行測試。(好像也可以將JAVA檔案編譯為CLASS檔案打個Jar,jar cvf  xxx.jar  *.class)這個JAVA的自行研究了。

 

有幾個錯:

java.lang.UnstaisfiedLinkError:no cp in java.library.path

這是找不到libcp.so這個庫。我只知道放到/usr/lib下可以找到,當然對eclipse的高手可以設定搜尋路徑到libcp.so對應的路徑下也一樣可以找到。

由於打包版本和運行版本不對導致

 

由於我的WIN平台和虛擬機器LINUX平台上的JDK不同,所以一直都沒有測試成功。請讀者自行驗證了。

 

最後:總結幾點。

打包時一定要注意使用的JDK,版本。運行環境版本要與打包版本一至,不然載入就會失敗。(個人理解的,未得到驗證)

其次,就是路徑,環境變數需要設定好,否則就出現找不到庫等問題。

再次,如果是打C++的SO庫,在類型上都需要做一些必要的轉換。這個只是個初步介紹,在實際項目中,會碰到各種問題,哪時再自行GOOGLE了。

 

OK,完畢。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.