<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BirdsHover

    ——路漫漫其修遠兮,吾將上下而爬樓梯!

      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
      21 隨筆 :: 8 文章 :: 34 評論 :: 0 Trackbacks
    這個問題比較急,借用首頁發一下,謝謝!

    最近需要對一個C++庫進行封裝,為簡單起見決定使用JAVA對其封裝。但是一直調用不成功,于是寫了一段測試代碼測試一下。為簡單起見,就使用默認包了。

    public class TestDLL {
        
    public native String Test(String put);
        
        
    static{
            System.loadLibrary(
    "testdll");
        }
        
        
    public static void main(String[] args) {    
            TestDLL test 
    = new TestDLL();
            System.out.println(test.Test(
    new Date().toString()));
        }
    }

    然后生成了C++頭文件

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include 
    <jni.h>
    /* Header for class TestDLL */

    #ifndef _Included_TestDLL
    #define _Included_TestDLL
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     TestDLL
     * Method:    Test
     * Signature: (Ljava/lang/String;)Ljava/lang/String;
     
    */
    JNIEXPORT jstring JNICALL Java_TestDLL_Test
      (JNIEnv 
    *, jobject, jstring);

    #ifdef __cplusplus
    }
    #endif
    #endif

    下面是簡單的實現
    #include "TestDLL.h"

    JNIEXPORT jstring JNICALL Java_TestDLL_Test
      (JNIEnv 
    *, jobject, jstring put){
          
    return put;
    }

    在linux下通過gcc編譯后,java調用:
    java -Djava.library.path=/home/xp -cp . TestDLL

    一直報錯:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no testdll in java.library.path
            at java.lang.ClassLoader.loadLibrary(ClassLoader.java:
    1734)
            at java.lang.Runtime.loadLibrary0(Runtime.java:
    823)
            at java.lang.System.loadLibrary(System.java:
    1028)
            at TestDLL.main(TestDLL.java:
    27)

    但是我在windows下編譯了testdll.dll后,能夠調用正常。

    接著我改寫為System.load("/home/xp/testdll.so");結果可以在linux使用了,希望有經驗的朋友可以解答我的疑問。


    posted on 2010-04-28 18:11 Birdshover 閱讀(1828) 評論(8)  編輯  收藏

    評論

    # re: 一個JNI的問題請教 2010-04-28 19:04 美食天下
    學習中...  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-28 20:00
    在Linux下是so文件,沒有dll文件的概念的。
    dll是只在windows下使用的。】

    所以在Windows下編譯成dll文件,而在Linux下需要編譯成so文件。

    應該是這樣的。我還沒寫過jni呢,倒是用了挺多的。。。。  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-28 20:04 kalman03

    “但是我在windows下編譯了testdll.dll后,能夠調用正常。

    接著我改寫為System.load("/home/xp/testdll.so");結果可以在 linux使用了”

    在windows上和linux上都正常,還有什么問題?
    難道是樓上說的情況?  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-28 20:13 隔葉黃鶯
    不需要寫 .dll 還是 so,程序會根據平臺決定是哪一類型文件
    還就是要了解動態庫會依次從哪里找,
    一般是 當前目錄,系統目錄,環境中的 LIB 目錄  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-29 08:58 香草
    別說你是用Win環境的C編輯器得到的文件放在linux下運行 ?  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-29 09:22 jacky_zz
    問題是在Windows用gcc編譯的時候,如果沒有指定用參數編譯為Windows平臺的dll,那么gcc會在導出符號前加下劃線“_”,這樣在Windows下就不能找到對應的導出符號了,所以你需要在編譯的時候指定參數:
    -Wl,--add-stdcall-alias和-Wl,--kill-at來去掉導出符號前的下劃線,以及導出符號中的@字符。  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-29 20:44

    @隔葉黃鶯
    像這位達人所說的。可以不用寫dll和so也可以。
    Java有兩種方法加載:
    System.load和System.loadLibrary
    后面那個方法只要寫你的文件名就可以了如:System.loadLibrary(testdll) ——沒有后綴的。記得把testdll那個文件放到path目錄下
    System.load參數要帶絕對路徑,且文件要有后綴  回復  更多評論
      

    # re: 一個JNI的問題請教 2010-04-30 12:10 凡客誠品專賣店
    阿克蘇開得久空間撒旦  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 5g影院5g天天爽永久免费影院| 菠萝菠萝蜜在线免费视频| 亚洲色少妇熟女11p| 久9这里精品免费视频| 久久精品国产亚洲麻豆| 美女视频黄视大全视频免费的| 久久久久亚洲国产| 在线观看免费人成视频色9| 亚洲AV色吊丝无码| 色吊丝永久在线观看最新免费| 亚洲欧美日韩综合久久久久| 四虎影院永久免费观看| 中国一级特黄的片子免费 | 亚洲综合偷自成人网第页色| 成年女人午夜毛片免费看| a级毛片免费完整视频| 亚洲福利视频网站| 中文字幕亚洲专区| 黄色片在线免费观看| a级毛片免费高清毛片视频| 日本高清在线免费| 最近中文字幕免费完整| 国产免费爽爽视频在线观看| 日本一区二区在线免费观看| 亚洲1区1区3区4区产品乱码芒果 | 黄网站色在线视频免费观看| 中国好声音第二季免费播放| 噼里啪啦免费观看高清动漫4| 亚洲国产精品尤物yw在线| www.免费在线观看| 亚洲中文字幕无码一久久区| 韩国免费一级成人毛片| 综合亚洲伊人午夜网 | 黄网站在线播放视频免费观看| 国产免费无码一区二区| 啊灬啊灬别停啊灬用力啊免费看| 最近中文字幕mv免费高清视频7| 国产AV无码专区亚洲AV毛网站 | av午夜福利一片免费看久久| 黄网站色视频免费看无下截| 精品久久久久国产免费|