abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 15:11 | Komunita

    Na webu konference Den IPv6, která se konala 4. června v Národní technické knihovně v pražských Dejvicích, jsou nyní k dispozici všechny prezentace (v PDF) a jejich videozáznamy. Organizátory konference byly i letos sdružení CESNET, CZ.NIC a NIX.CZ.

    VSladek | Komentářů: 0
    dnes 13:11 | Nová verze

    Byla vydána nová verze 9.1.0 správce sbírky fotografií digiKam (Wikipedie). Přehled novinek i s náhledy v oficiálním oznámení (NEWS). Vypíchnout lze vylepšené vyhledávání nebo podporu Pixel Motion Photos. Nejnovější digiKam je ke stažení také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo ke spuštění a spustit.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Pozvánky

    Přihlaste svou přednášku na další ročník konference LinuxDays, který proběhne 3. a 4. října na FIT ČVUT v pražských Dejvicích. Příjem témat poběží do konce prázdnin, pak proběhne veřejné hlasování a následně sestavení programu.

    Petr Krčmář | Komentářů: 2
    dnes 04:44 | Nová verze

    Byla vydána nová verze 2.4.68 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 13 zranitelností.

    Ladislav Hagara | Komentářů: 2
    včera 22:44 | IT novinky

    Apple na své vývojářské konferenci WWDC26 (Worldwide Developers Conference, keynote) představil řadu novinek. Vypíchnout lze novou generaci Apple Intelligence a zbrusu novou Siri, která dostala název Siri AI. Kvůli Aktu o digitálních trzích (DMA) však funkce Siri AI nebudou v systémech iOS 27 a iPadOS 27 k dispozici uživatelům v Evropské unii.

    Ladislav Hagara | Komentářů: 0
    včera 22:22 | Nová verze

    Byla vydána nová verze 1.18.0 distribučního frameworku Flatpak (Wikipedie), tj. technologie umožňující distribuovat aplikace v podobě jednoho instalačního souboru na různé linuxové distribuce a jejich různá vydání. Přehled novinek na GitHubu. Vypíchnout lze podporu rozhraní /dev/kfd pro výpočty na kartách AMD (AMDKFD).

    Ladislav Hagara | Komentářů: 0
    včera 20:44 | Nová verze

    aMule (Wikipedie), tj. multiplatformní klient pro peer-to-peer sdílení souborů pro sítě eD2k and Kademlia, byl po více než pěti letech od vydání poslední verze 2.3.3, vydán v nové major verzi 3.0.0 (GitHub). S novou webovou stránkou a dokumentací.

    Ladislav Hagara | Komentářů: 5
    včera 12:55 | IT novinky

    Byly vyhlášeni vítězové a zveřejněny vítězné zdrojové kódy (YouTube, GitHub) již 29. ročníku soutěže International Obfuscated C Code Contest (IOCCC), tj. soutěže o nejnepřehlednější (nejobfuskovanější) zdrojový kód v jazyce C.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | IT novinky

    Evropská komise předložila evropský balíček pro technologickou suverenitu, tedy soubor opatření, která mají posílit kapacity EU v oblasti polovodičů, umělé inteligence, cloudu a open source. To Evropě pomůže stát se lídrem v oblasti umělé inteligence, posílit její digitální autonomii a vytvářet podmínky pro udržitelnější digitální budoucnost.

    Ladislav Hagara | Komentářů: 14
    včera 04:44 | Nová verze

    OpenCV (Open Source Computer Vision, Wikipedie), tj. open source multiplatformní knihovna pro zpracování obrazu a počítačové vidění, byla vydána v nové major verzi 5.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (8%)
     (2%)
     (15%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (26%)
    Celkem 1855 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: Java jni: java.lang.UnsatisfiedLinkError: undefined symbol: JAWT_GetAW

    14.2.2009 16:55 kaplan
    Java jni: java.lang.UnsatisfiedLinkError: undefined symbol: JAWT_GetAW
    Přečteno: 709×

    Dobrý den,

    pokouším se přehrát video v mé java aplikaci pomocí mplayeru. Proto, abych byl schopen získat wid komponenty pro mplayer používám jni. Tento postup jsem vygooglil.

     

    Vytvořil jsem si ExtendedCavas.java:

    <code>

    package jmediacenter.extendedCanvas;

    public class ExtendedCanvas extends java.awt.Canvas
    {
        private static final long serialVersionUID = 1L;
        public native int getNativeWindow();

        static
        {
            try
            {
                System.loadLibrary("ExtendedCanvas");
            }
            catch (Throwable e)
            {
                e.printStackTrace();
                System.exit(1);
            }
        }
    }

    </code>

     

    Zkompiloval a pomocí javah vytvořil hlavičkový soubor: javah -jni jmediacenter.extendedCanvas.ExtendedCanvas.

     

    Toto je vygooglený kód pro nativní metodu: jmediacenter_extendedCanvas_ExtendedCanvas.c:

    <code>

    #include <jni.h>
    #include <jawt.h>
    #include <jawt_md.h>
    #include <assert.h>
    #ifdef WIN32
    #include <windows.h>
    #endif

    #include "jmediacenter_extendedCanvas_ExtendedCanvas.h"

    JNIEXPORT jint JNICALL Java_jmediacenter_extendedCanvas_ExtendedCanvas_getNativeWindow
      (JNIEnv *env, jobject obj_this)
    {
    jboolean result;
            jint lock;

            JAWT awt;
            JAWT_DrawingSurface* ds;
            JAWT_DrawingSurfaceInfo* dsi;
    #ifdef WIN32
          JAWT_Win32DrawingSurfaceInfo* dsi_win;
          HWND hWnd;
    #else
            JAWT_X11DrawingSurfaceInfo* dsi_x11;
    #endif

            /* Get the AWT */
            awt.version = JAWT_VERSION_1_3;
            result = JAWT_GetAWT(env, &awt);
            if(result == JNI_FALSE) return -1;

            /* Get the drawing surface */
            if ((ds = awt.GetDrawingSurface(env, obj_this)) == NULL)
                    return 0L;

            /* Lock the drawing surface */
            lock = ds->Lock(ds);
            if((lock & JAWT_LOCK_ERROR)  ) {
                    return -1;
            }

            /* Get the drawing surface info */
            dsi = ds->GetDrawingSurfaceInfo(ds);

            /* Get the platform-specific drawing info */
    #ifdef WIN32
          dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
          //hdc= dsi_win->hdc;
          hWnd = dsi_win->hwnd;
          return ((jlong)hWnd);
    #else
            dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
            int id = dsi_x11->drawable;

            ds->Unlock(ds);
            return id;
    #endif
    }
    </code>

     

    Z tohoto jsem si vytvořil knihovnu:

    gcc -shared -I/usr/java/jdk1.6.0_06/include -I/usr/java/jdk1.6.0_06/include/linux -o libExtendedCanvas.so jmediacenter_extendedCanvas_ExtendedCanvas.c

     

    Cestu ke knihovně mám vloženou do -Djava.library.path. Cesty k ostatním knihovnám z .../jre/lib/i386 jsem přidal do dl.so.conf a použil dlconfig.

     

    Když potom spustím mojí aplikaci dostanu následující error:

    java.lang.UnsatisfiedLinkError: .../libExtendedCanvas.so: .../libExtendedCanvas.so: undefined symbol: JAWT_GetAWT
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1030)
        at jmediacenter.extendedCanvas.ExtendedCanvas.<clinit>(ExtendedCanvas.java:29)
     

    ldd libExtendedCanvas.so hlásí toto:

            linux-gate.so.1 =>  (0xffffe000)
            libc.so.6 => /lib/i686/libc.so.6 (0xb7dab000)
            /lib/ld-linux.so.2 (0x80000000)
     

    Toto mě ale zaráží, protože předpokládám, že tato knihovna bude potřebovat min. libjawt.so ale jak je vidět nepotřebuje. Zde bude asi probém. Nevím si s tím rady.

     

    Díky za každou radu.

    Odpovědi

    Luboš Doležel (Doli) avatar 16.2.2009 01:49 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: Java jni: java.lang.UnsatisfiedLinkError: undefined symbol: JAWT_GetAW
    Toto mě ale zaráží, protože předpokládám, že tato knihovna bude potřebovat min. libjawt.so ale jak je vidět nepotřebuje.
    Ale potřebuje, jen jste linkeru neřekl, že se má knihovna s libjawt.so linkovat (-ljawt ?).
    17.2.2009 20:42 kaplan
    Rozbalit Rozbalit vše Re: Java jni: java.lang.UnsatisfiedLinkError: undefined symbol: JAWT_G

    Problém vyřešen.

    Stačilo při kompilaci knihovny přilinkovat knihovnu libjawt.so:

    gcc -shared -I/usr/java/jdk1.6.0_06/include -I/usr/java/jdk1.6.0_06/include/linux -o libExtendedCanvas.so jmediacenter_extendedCanvas_ExtendedCanvas.c -L/usr/java/jdk1.6.0_06/jre/lib/i386 -ljawt

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.