JavaCPP 预设
<sup>所有平台(Android、iOS、Linux、Mac OS X、Windows)的构建状态:</sup>
<sup>定制预设的商业支持和付费服务:</sup>
JavaCPP预设模块包含广泛使用的C/C++库的Java配置和接口类。org.bytedeco.<moduleName>.presets
包中的配置文件被Parser
用于从C/C++头文件创建针对org.bytedeco.<moduleName>
包的Java接口文件,这些接口文件又被Generator
和本地C++编译器用于生成所需的JNI库。此外,辅助类使其功能在Java平台(包括Android)上更易于使用。
为便于理解,本仓库的文档可以分为两个层级:
javacpp-presets
模块本身。这个父级README.md文件包含适用于所有模块的通用信息,用于解决下载、通用要求、安装过程和构建说明等问题。每个子目录中的相应README.md文件包含有关API文档、特定要求、pom.xml
文件的依赖关系以及每个模块的预设和包的示例使用代码的额外信息、链接和注释。请注意,并非所有预设都具有相同的成熟度,由于它们基于第三方库的API,样式和布局也可能有所不同。
请参阅wiki页面了解有关如何创建新预设的更多信息。由于目前缺乏额外的文档,请随时在邮件列表或讨论论坛上提问。
包含所有子模块二进制文件和所有支持平台(Android、iOS、Linux、Mac OS X和Windows)构建的JAR文件可以从Maven中央仓库获取。包含这些JAR文件的归档文件也可作为发布版本提供。
要手动安装JAR文件,请按照下面手动安装部分的说明进行操作。
我们也可以通过以下方式自动下载和安装所有内容:
pom.xml
文件中)<dependency> <groupId>org.bytedeco</groupId> <artifactId>${moduleName}-platform</artifactId> <version>${moduleVersion}-1.5.10</version> </dependency>
build.gradle.kts
或build.gradle
文件中)dependencies { implementation("org.bytedeco:$moduleName-platform:$moduleVersion-1.5.10") }
project.clj
文件中):dependencies [ [~(symbol (str "org.bytedeco/" moduleName "-platform")) ~(str moduleVersion "-1.5.10")] ]
build.sbt
文件中)libraryDependencies += "org.bytedeco" % moduleName + "-platform" % moduleVersion + "-1.5.10"
其中moduleName
和moduleVersion
变量对应于所需的模块。这会下载所有平台的二进制文件,但要仅获取一个平台的二进制文件,我们可以将javacpp.platform
系统属性(通过-D
命令行选项)设置为类似android-arm
、linux-x86_64
、macosx-x86_64
、windows-x86_64
等。我们还可以指定多个平台,请参阅减少依赖项数量中的示例。Gradle用户还可以使用Gradle JavaCPP,同样,Scala用户可以使用SBT-JavaCPP。
要使用JavaCPP预设,您需要下载并安装以下软件:
此外,对于Android,JavaCPP预设还依赖于:
只需将所有所需的JAR文件(opencv*.jar
、ffmpeg*.jar
等)以及javacpp.jar
放在类路径中的某个位置即可。作为预构建工件提供的JAR文件旨在与JavaCPP一起使用。Linux的二进制文件是用Ubuntu构建的,因此它们应该可以在当前使用的大多数发行版上运行。Android的二进制文件是为配备FPU的ARMv7处理器编译的,因此它们不会在HTC Magic等古老设备或其他一些ARMv6 CPU的设备上运行。以下是一些常见情况的更具体说明:
NetBeans (Java SE 7或更新版本):
Eclipse (Java SE 7或更新版本):
Visual Studio Code (Java SE 7或更新版本):
+
。IntelliJ IDEA (Android 7.0或更新版本):
app/libs
子目录中。+
,然后选择"2 文件依赖项"。libs
子目录中选择所有JAR文件。之后,我们可以几乎透明地通过org.bytedeco.<moduleName>
包中的接口类访问相应的C/C++ API。实际上,Parser
将C/C++头文件中的代码注释翻译成Java接口文件,(几乎)可以直接被Javadoc使用。但是,由于它们的翻译仍有待改进,人们可能希望参考原始文档页面。例如,OpenCV和FFmpeg的文档可以在线找到:
如果上面提供的二进制文件不能满足您的需求,您可能需要从源代码重新构建它们。为此,Java端的项目文件作为Maven模块创建。默认情况下,Maven构建还通过cppbuild.sh
脚本在本地C/C++端安装原生库,但也可以通过其他方式安装。
此外,可以在wiki页面上找到有关主要平台推荐的构建环境的其他信息。
JavaCPP预设依赖于Maven(一个强大的Java构建系统),因此在尝试构建之前,请确保安装并了解以下内容:
每个子模块默认依赖于包含的cppbuild.sh
脚本(如下所述)来将其相应的原生库安装到cppbuild
子目录中。要使用系统其他地方已安装的原生库,也可以在pom.xml
文件或.java
配置文件中指定除cppbuild
之外的其他安装目录。支持以下版本:
一旦所有内容都安装和配置完成,只需在包含父级pom.xml文件的目录中执行以下命令:
$ mvn install --projects .,opencv,ffmpeg,等 -Djavacpp.platform.root=/path/to/android-ndk/
通过在命令中仅指定所需的子模块,但不要在逗号分隔的项目列表中包含前导句点".",否则父级pom.xml文件本身可能不会被安装。(-Djavacpp.platform.root=...选项仅适用于Android构建。)同时指定-Djavacpp.cppbuild.skip选项可跳过cppbuild.sh脚本的执行。除了-Djavacpp.platform=...之外,某些预设还可以使用-Djavacpp.platform.extension=-gpu或CPython与-Djavacpp.platform.extension=-python一起构建。详细信息请参阅pom.xml文件中的注释。从"platform"子目录中,我们还可以使用类似的命令安装"platform"构件:
$ cd platform $ mvn install --projects ../opencv/platform,../ffmpeg/platform,等 -Djavacpp.platform.host
运行这些脚本可以让我们轻松地在多个平台上安装本机库,但需要额外的软件:
在上述内容正常工作的情况下,这些脚本会作为Maven构建生命周期的一部分自动启动,但我们也可以手动执行
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform <name>] [-extension <name>] <install | clean> [projects]
其中可能的平台名称包括:
某些构建支持的-gpu扩展还需要安装CUDA。(ANDROID_NDK变量仅适用于Android构建。)请注意,脚本会根据需要从适当的网站下载源代码存档。
要为没有FPU的Android设备编译二进制文件,首先确保这是你想要的。没有FPU,OpenCV或FFmpeg的性能都会非常差。如果你仍然希望继续,那么在各个文件中将"armeabi-v7a"替换为"armeabi",并将"-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16"