Status build untuk semua platform (Android, iOS, Linux, Mac OS X, Windows):
Dukungan komersial dan layanan berbayar untuk preset khusus:
Modul JavaCPP Presets berisi konfigurasi Java dan kelas antarmuka untuk pustaka C/C++ yang banyak digunakan. File konfigurasi dalam paket org.bytedeco.<moduleName>.presets
digunakan oleh Parser
untuk membuat dari file header C/C++ file antarmuka Java yang menargetkan paket org.bytedeco.<moduleName>
, yang pada gilirannya digunakan oleh Generator
dan kompiler C++ asli untuk menghasilkan perpustakaan JNI yang diperlukan. Selain itu, kelas pembantu membuat fungsinya lebih mudah digunakan pada platform Java, termasuk Android.
Untuk tujuan orientasi, dokumentasi repositori ini dapat dibagi menjadi 2 tingkat:
javacpp-presets
itu sendiri, dan File induk README.md ini berisi informasi umum yang berlaku untuk semua modul untuk menyelesaikan masalah terkait pengunduhan, persyaratan umum, prosedur instalasi, dan instruksi pembuatan. File README.md masing-masing di setiap subdirektori berisi informasi tambahan, tautan, dan catatan mengenai dokumentasi API, persyaratan khusus, ketergantungan untuk file pom.xml
, dan contoh kode penggunaan, untuk preset dan paket setiap modul. Perlu diketahui bahwa tidak semua preset memiliki tingkat kematangan yang sama, dan gaya serta tata letaknya mungkin juga berbeda satu sama lain karena didasarkan pada API perpustakaan pihak ketiga.
Silakan merujuk ke halaman wiki untuk informasi lebih lanjut tentang cara membuat preset baru. Karena dokumentasi tambahan saat ini masih kurang, silakan juga mengajukan pertanyaan di milis atau forum diskusi.
File JAR yang berisi biner untuk semua modul anak dan build untuk semua platform yang didukung (Android, iOS, Linux, Mac OS X, dan Windows) dapat diperoleh dari Repositori Pusat Maven. Arsip yang berisi file JAR ini juga tersedia sebagai rilis.
Untuk menginstal file JAR secara manual, ikuti petunjuk di bagian Instalasi Manual di bawah.
Kami juga dapat mengunduh dan menginstal semuanya secara otomatis dengan:
pom.xml
) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
atau build.gradle
) dependencies {
implementation( " org.bytedeco: $m oduleName -platform: $m oduleVersion -1.5.11 " )
}
project.clj
) :dependencies [
[~( symbol ( str " org.bytedeco/ " moduleName " -platform " )) ~( str moduleVersion " -1.5.11 " )]
]
build.sbt
) libraryDependencies += " org.bytedeco " % moduleName + " -platform " % moduleVersion + " -1.5.11 "
dimana variabel moduleName
dan moduleVersion
sesuai dengan modul yang diinginkan. Ini mengunduh binari untuk semua platform, tetapi untuk mendapatkan binari hanya untuk satu platform kita dapat mengatur properti sistem javacpp.platform
(melalui opsi baris perintah -D
) menjadi sesuatu seperti android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
, dll. Kita juga bisa menentukan lebih dari satu platform, lihat contohnya di Mengurangi Jumlah Ketergantungan. Opsi lain yang tersedia untuk pengguna Gradle adalah Gradle JavaCPP, dan demikian pula untuk pengguna Scala, ada SBT-JavaCPP.
Untuk menggunakan JavaCPP Presets, Anda perlu mengunduh dan menginstal perangkat lunak berikut:
Selanjutnya, dalam kasus Android, Preset JavaCPP juga mengandalkan:
Sederhananya semua file JAR yang diinginkan ( opencv*.jar
, ffmpeg*.jar
, dll.), selain javacpp.jar
, di suatu tempat di jalur kelas Anda. File JAR yang tersedia sebagai artefak bawaan dimaksudkan untuk digunakan dengan JavaCPP. Biner untuk Linux dibuat dengan Ubuntu, sehingga dapat berfungsi pada sebagian besar distribusi yang saat ini digunakan. Berikut adalah beberapa instruksi yang lebih spesifik untuk kasus umum:
NetBeans (Java SE 7 atau lebih baru):
Eclipse (Java SE 7 atau lebih baru):
Kode Visual Studio (Java SE 7 atau lebih baru):
+
.IntelliJ IDEA (Android 7.0 atau lebih baru):
app/libs
.+
, dan pilih "2 Ketergantungan file".libs
. Setelah itu, kita dapat mengakses API C/C++ terkait secara hampir transparan melalui kelas antarmuka yang terdapat dalam paket org.bytedeco.<moduleName>
. Memang, Parser
menerjemahkan komentar kode dari file header C/C++ ke dalam file antarmuka Java, (hampir) siap untuk digunakan oleh Javadoc. Namun, karena terjemahannya masih belum memuaskan, seseorang mungkin ingin merujuk ke halaman dokumentasi aslinya. Misalnya, OpenCV dan FFmpeg dapat ditemukan online di:
Jika file biner yang tersedia di atas tidak cukup untuk kebutuhan Anda, Anda mungkin perlu membangunnya kembali dari kode sumber. Untuk tujuan ini, file proyek di sisi Java dibuat sebagai modul Maven. Secara default, build Maven juga menginstal pustaka asli di sisi C/C++ asli dengan skrip cppbuild.sh
, namun pustaka tersebut juga dapat diinstal dengan cara lain.
Selain itu, di halaman wiki, seseorang dapat menemukan informasi tambahan tentang lingkungan pembangunan yang direkomendasikan untuk platform utama.
Preset JavaCPP bergantung pada Maven, sistem build yang kuat untuk Java, jadi sebelum mencoba build, pastikan untuk menginstal dan membaca:
Setiap modul anak pada gilirannya bergantung secara default pada skrip cppbuild.sh
yang disertakan, dijelaskan di bawah, untuk menginstal pustaka asli yang sesuai di subdirektori cppbuild
. Untuk menggunakan perpustakaan asli yang sudah diinstal di tempat lain pada sistem, direktori instalasi selain cppbuild
juga dapat ditentukan di file pom.xml
atau di file konfigurasi .java
. Versi berikut ini didukung:
Setelah semuanya terinstal dan dikonfigurasi, jalankan saja
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
di dalam direktori yang berisi file induk pom.xml
, dengan menentukan hanya modul anak yang diinginkan dalam perintah, tetapi tanpa titik awal "." dalam daftar proyek yang dipisahkan koma, file induk pom.xml
itu sendiri mungkin tidak dapat diinstal. (Opsi -Djavacpp.platform.root=...
hanya diperlukan untuk build Android.) Tentukan juga -Djavacpp.cppbuild.skip
sebagai opsi untuk melewati eksekusi skrip cppbuild.sh
. Selain -Djavacpp.platform=...
, beberapa preset juga dapat dibuat terhadap CUDA dengan -Djavacpp.platform.extension=-gpu
atau CPython dengan -Djavacpp.platform.extension=-python
. Silakan merujuk ke komentar di dalam file pom.xml
untuk detail lebih lanjut. Dari subdirektori "platform", kita juga dapat menginstal artefak "platform" dengan perintah serupa:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
Menjalankan skrip memungkinkan kita menginstal perpustakaan asli dengan mudah di berbagai platform, tetapi diperlukan perangkat lunak tambahan:
Jika hal di atas berfungsi, skrip diluncurkan secara otomatis sebagai bagian dari siklus hidup pembuatan Maven, tetapi kita juga dapat mengeksekusinya secara manual
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
jika memungkinkan, nama platformnya adalah:
android-arm
android-arm64
android-x86
android-x86_64
ios-arm64
ios-x86_64
linux-armhf
linux-arm64
linux-ppc64le
linux-x86
linux-x86_64
macosx-arm64
macosx-x86_64
windows-x86
windows-x86_64
Ekstensi -gpu
yang didukung oleh beberapa build juga memerlukan instalasi CUDA. (Variabel ANDROID_NDK
hanya diperlukan untuk build Android.) Harap perhatikan bahwa skrip mengunduh arsip sumber dari situs yang sesuai jika diperlukan.
Untuk mengkompilasi biner pada perangkat Android tanpa FPU, pertama-tama pastikan ini yang Anda inginkan. Tanpa FPU, kinerja OpenCV atau FFmpeg pasti tidak dapat diterima. Jika Anda masih ingin melanjutkan cara tersebut, ganti "armeabi-v7a" dengan "armeabi" dan "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" dengan "-march=armv5te -mtune =xscale -msoft-float", di dalam berbagai file.
Meskipun JavaCPP dapat mengambil perpustakaan asli yang diinstal pada sistem, skrip ada untuk memfasilitasi proses pembangunan di berbagai platform. Mereka juga mengizinkan JavaCPP untuk menyalin perpustakaan asli dan memuatnya saat runtime dari file JAR yang dibuat di atas oleh Maven, fitur yang berguna untuk aplikasi mandiri atau applet Java. Selain itu, trik seperti berikut ini berfungsi dengan JNLP:
< resources os = " Linux " arch = " x86 i386 i486 i586 i686 " >
< jar href = " lib/opencv-linux-x86.jar " />
< jar href = " lib/ffmpeg-linux-x86.jar " />
</ resources >
< resources os = " Linux " arch = " x86_64 amd64 " >
< jar href = " lib/opencv-linux-x86_64.jar " />
< jar href = " lib/ffmpeg-linux-x86_64.jar " />
</ resources >
Terima kasih kepada Jose Gómez karena telah mengujinya!
Kontribusi dalam bentuk apa pun sangat kami harapkan! Saat ini, Parser
memiliki kemampuan yang terbatas, jadi saya berencana untuk memperbaikinya secara bertahap hingga mampu mengurai file header C++ berukuran besar yang bahkan lebih berbelit-belit dibandingkan file dari OpenCV, Caffe, atau TensorFlow, namun sistem build bisa juga ditingkatkan. Oleh karena itu, saya mencari bantuan terutama untuk lima tugas berikut, tanpa urutan tertentu:
Parser
(dengan menggunakan preset untuk LLVM dan Dentang?)linux-armhf
untuk Raspberry Pi, dll.Untuk berkontribusi, silakan lakukan fork dan buat permintaan tarik, atau posting saran Anda sebagai "masalah" baru. Terima kasih banyak sebelumnya atas kontribusi Anda!
Pimpinan proyek: Samuel Audet samuel.audet at
gmail.com
Situs pengembang: https://github.com/bytedeco/javacpp-presets
Grup diskusi: http://groups.google.com/group/javacpp-project