<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 閱讀(1818) 評論(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 凡客誠品專賣店
    阿克蘇開得久空間撒旦  回復  更多評論
      


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


    網站導航:
     
    主站蜘蛛池模板: 三年片在线观看免费观看高清电影 | 国产精品美女久久久免费| 在线成人a毛片免费播放| 亚洲人成人77777网站不卡| 97视频免费在线| 在线精品亚洲一区二区| 成人免费无码大片A毛片抽搐色欲| 中中文字幕亚洲无线码| 免费看美女让人桶尿口| 黄色a三级免费看| 亚洲午夜福利在线观看| a级黄色毛片免费播放视频| 亚洲人成网www| 日本成年免费网站| 亚洲AV无码一区二区三区性色| 国产无遮挡色视频免费视频| 一区二区视频在线免费观看| 亚洲人成人一区二区三区| 91精品国产免费| 亚洲综合色一区二区三区| 日本视频免费在线| 亚欧乱色国产精品免费视频| 久久精品国产精品亚洲艾| www.黄色免费网站| 四虎永久在线精品免费一区二区| 久久久久亚洲av无码尤物| 国产大片线上免费观看| 无套内谢孕妇毛片免费看看| 亚洲v高清理论电影| 国产免费不卡v片在线观看| 无遮挡呻吟娇喘视频免费播放| 亚洲精品高清视频| 日韩视频在线免费观看| 国产自国产自愉自愉免费24区 | 亚洲中文无码卡通动漫野外| 亚洲精品国产自在久久| 最近中文字幕免费完整| 精品亚洲视频在线| 亚洲综合男人的天堂色婷婷| 免费中文字幕不卡视频| 无码人妻一区二区三区免费看|