IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 1 - JNI - Nastavení prostředí pro JNI: Eclipse, MinGW

Co to JNI vlastně je? Celý název je Java Native Interface a jedná se o rozhraní (neplést si s implementací rozhraní), které umožňuje přístup k nativním metodám vyvinutých v nativních jazycích (např. C, C++, ASM, Fortran, Pascal). Teoreticky by to mělo fungovat pro všechny nativní jazyky, které jsou schopny vytvořit sdílené knihovny (shared libraries). Na platformě Windows známé jako .dll a na platformě Linux známé jako .so. Teoreticky by to mohlo fungovat i se statickými knihovnami, ale to nemám ověřené.

V těchto nativních jazycích se vytvoří sdílené knihovny, které pak v Javě načteme a metody(funkce) v nich obsažené, můžeme normálně volat. Co tím získáme? Ve většině případů tím, že vynecháme JVM (Java Virtual Machine) - nativní metody přistupují přímo k systémovým prostředkům a tím by mělo dojít ke zvýšení rychlosti provádění daných metod. Ovšem není to vždy pravidlem. Mám vyzkoušené, že identický algoritmus (násobení double matic) v jiných jazycích proběhne na stejném stroji v Javě přes JVM rychleji než přes JNI nebo přímo přes program napsaný v C. Takže dogma, že Java je principiálně pomalejší není ve všech případech správné.

K samotnému JNI a prvnímu praktickému příkladu přistoupíme až ve třetím pokračování tohoto seriálu. V prvním díle nás čeká nastavení prostředí a v druhém díle vytvoření triviálních příkladů Hello World pomocí Eclipse v C, C++ a Javě. K naučení této technologie(fra­meworku) je nutná základní znalost Javy a C nebo C++.

Seriál je umístěn do skupiny článků pro pokročilé. A to z důvodů, že skutečně očekávám používání a pochopení objektů, metod a výjimek. Nemíním tyto triviálnosti rozebírat. Dokonce by bylo vhodné či prakticky povinné mít základy C nebo C++. V dalších kapitolám při psaní těl metod je nutno znát syntaxi daných jazyků a koncept pointerů. Pokud tomu plně nerozumíte je nutno si to nejprve nastudovat, pochopit a vyzkoušet.

Sami zjistíte, že využívání JNI je skutečně velmi jednoduché. Není k tomu potřeba žádná Java EE, vše funguje s SE. Je to docela dobrá věc, když potřebujete získat některé schopnosti z C/C++ jazyka (např. přímé systémové eventy), které se Javě nedostávají. Dále se to samozřejmě hodí, pokud chcete, aby některé části kódu byly uchráněny nenechavých očím Java dekompilérů.

Takže začneme. V tomto díle nás čeká pouze nastavení prostředí.

  • naistalujeme Javu 7,8,9,10 (JDK a JRE) a pouze JDK u Java 11 a vyšších
  • naistalujeme MinGW 32/64 bit (pro kompilaci/linking s C/C++)
  • spustime Eclipse a stáhneme balíčky CDT pro podporu C/C++ v Eclipse IDE

Pozn.

Pokud chcete vše instalovat s právy administrátora a chcete programovat s právy user, je nutno nastavit práva přístupu skupiny user k těmto nově vytvořeným adresářům. Pokud systém práv přístupu nevyužíváte tuto poznámku neřešte.

Instalace Javy

Instalací Javy SE (Standard Edition) je myšleno instalace JDK (Java Developer Kit) a JRE (Java Runtime Enviroment). Budeme na to potřebovat přibližně cca 0,55 GB místa. Postup instalace je ukázán zde a instalační soubory můžete stáhnout z ofic. webu Oracle.

Je vhodné (povinné) provést nastavení systémové proměnné PATH ve Windows. Vyřeší se nám tím spousta problémů při programování v Javě. Umožní nám to například volat příkazy (programy) obsažené umístěné v daném adresáři. Jak na to?

Ve Windows (v mém případě ve Windows 10) si najdeme Ovládací panely a budeme postupovat takto: Ovládací panely – Systém – Upřesnit nastavení systému – Upřesnit – Enviroment Variables (Proměnné prostředí) – vybereme PATH a dáme upravit. Zde dáme Nový a vložíme umístěný adresáře \bin v Javě JDK i JRE. Já si instaluji JDK do adresáře C:\Program Files\JavaJDK a JRE do C:\Program Files\JavaJRE, ale vy samozřejmě můžete mít Javu v jiném adresáři. Takže v mém případě jsou cesty C:\Program Files\JavaJDK\bin a C:\Program Files\JavaJRE\bin. Můžete ji mít např. C:\Java8a66JDK a v tomto případě bude řetězec uložený do systémové proměnné vypadat takto: C:\Java8a66JDK\bin, nebo jiných discích D:\,E:\ závisí to na vás. U starších OS (Win8, 7, Vista, XP) je postup téměř identický.

Nastaveni PATH - JNI - Java Native Interface

Nyní je vhodné restartovat PC.

Instalace MinGW

Proč MinGW? Existuje spousta jiných, např. Microsoft Compiler umístěný ve Visual Studiu, Cygwin nebo Intel Compiler apod. Pokud máte nainstalované Visual Studio, můžete tento krok přeskočit, protože již kompilátor/linker máte. Jen pak při tvorbě projektu nezapomeňte vždy nastavit Visual C++ kompilátor, já budu mít v defaultu vždy MinGW. Zde je odkaz na projekt MinGW pouze pro 32bit verzi a zde je odkaz pro novější MinGW disponující 32bit i 64bit verzí. Doporučuji stahovat novější 64bit verzi umožnující provádět "buildy" pro obě bitové verze.

StazeniMinGW - JNI - Java Native Interface

Stažený instalátor pro 64bit spustíme jako administrátor. V Architecture si nastavte vhodnou procesorovou architekturu a u Exception se volí bitová varianta : DWARF pouze 32bit, SEH pouze 64bit, SJLJ pro 32 i 64 bit.

Nastavení instalátoru část1 - JNI - Java Native Interface

Instalaci doporučuji nastavit přímo do rootu C:\, protože umístění v jiných adresářích či případně na jiných discích může způsobit problémy při práci s ním.

Nastavení instalátoru část2 - JNI - Java Native Interface

Probíhá stahování a instalace

Probíhá stahování - JNI - Java Native Interface

Po ukončení instalace instalátoru klikneme na aktivní tlačítko Next a poté na Finish.

Pozn.1

Opětovně je vhodné (povinné) vložit adresář \bin\ umístění v C:\MinGW64\mingw64\ do PATH stejným způsobem, jako jsme to provedli v případě Java SE.

Pozn.2

K úspěšné kompilaci a buildování je nutno přidat "jni.h" a "jni_md.h" do kompilátoru MinGW. Lze to několika cestami, ale my to uděláme obyčejným kopírováním z Java SDK (v mém případě C:\ProgramFiles\Ja­vaJDK\include\jni­.h a C:\ProgramFiles\Ja­vaJDK\include\win32\jni­_md.h ) do adresáře C:\MinGW64\min­gw64\x86_64-w64-mingw\include . Pokud to neprovedeme, je nutno manuálně při "kompilaci" dané hlavičkové soubory přidat.

Nyní je vhodné restartovat PC.

Instalace Eclipse CDT

O IDE Eclipse toho psát moc nebudu. Je zdarma a nemusí se instalovat, stačí jej nakopírovat. Návod najdete zde na ITNetwork. V mém případě využívám Eclipse EE ale to není povinné, stačí i obyčejné Eclipse pro SE a konkrétně aktuální versi Mars. Balíčky pro prací s C/C++ jsou ve vývojářské komunitě známé jako CDT (C/C++ Developement Tools).

Stáhněte si Eclipse. Pokud si vyberete Eclipse pro C/C++, nebudete muset instalovat CDT balíčky, ale pokud je pro vás C/C++ pouze doplněk (jako to mám já), stáhněte si verzi pro Java Developery nebo Java EE Developery. Vyberte si verzi 32bit/64bit a stáhněte si *.zip. Ten rozbalte a nakopírujte, kamkoli chcete. Já Eclipse kopíruji do C:\Program Files\EclipseEE. Po spuštění se vám objeví okno pro definovaní úložiště vašeho workspace.

Nastavení Workspace - JNI - Java Native Interface

Pokud máte verzi Eclipse Oxygen a novější(Photon,2018-09), pak je stažení rozšíření jednoduché. Klikněte na Help - Marketplace a vyberte vyhledat CDT. Poté již proveďte pouze nastavení perspektivy.

Rozsireni CDT - JNI - Java Native Interface

V případě starší verze Eclipse Neon a starších stáhneme balíčky a pak nastavíme perspektivu pro C/C++. Jak to uděláme? Klikneme na Help – Install new software a objeví se dialogové okno, kde se provádí výběr balíčků, které chceme stáhnout.

Instalace balíčků - JNI - Java Native Interface

Klikneme na Add.. jako Name vložíme Eclipse CDT a do Location vložíme http://download.eclipse.org/…releases/8.8 (případně si můžete zobrazit všechny zdroje - je to ale několik set balíčku). Počkáme pár sekund, než se nám objeví strom checkboxů, který nám nabízí možnosti balíčku pro CDT v Eclipse.

Nastaveni výběru - JNI - Java Native Interface

Vybereme CDT Main Features - C/C++ Development Tools, C/C++ Development Tools SDK a CDT Optional Features - CDT Visual C++ Support, C/C++ Autotolls support.

Vybereme balíčky - JNI - Java Native Interface

Pak potvrdíme NEXT – NEXT – vybere I accept – FINISH a balíčky se nám začnou stahovat. Stahování balíčku může trvat až cca 5-30 minut. Samozřejmě existuje i řešení, kdy si dané balíčky sami stáhnete a nakopírujete do Eclipse, ale toto mi připadá pohodlnější. Eclipse se pak sám restartuje a spustí. Úvodní obrazovku přeskočíme kliknutím na ikonu "Workbench" vpravo nahoře.

Na závěr si ještě přidáme C/C++ perspektivu.

Vyběr perspektivy - JNI - Java Native Interface

Teď se můžeme jednoduše přepínat mezi Javou a C/C++.

Přepínání mezi perspektivami - JNI - Java Native Interface

V příštím díle, JNI - MinGW a Eclipse - CDT příklady, si v Eclipse CDT vyzkoušíme vytvoření programu Hello World v C , C++ a Javě.


 

Všechny články v sekci
JNI - Java Native Interface
Přeskočit článek
(nedoporučujeme)
JNI - MinGW a Eclipse - CDT příklady
Článek pro vás napsal Robert Michalovič
Avatar
Uživatelské hodnocení:
Ještě nikdo nehodnotil, buď první!
Programuji převážně v Javě SE,EE a trochu nativním C a CUDA. více viz.https://cz.linkedin.com/in/robert-michalovic
Aktivity