gpt4 book ai didi

java - 使用 CMake 和 Maven 构建 C++ 和 Java 代码并打包在一个 jar 中

转载 作者:可可西里 更新时间:2023-11-01 18:29:07 25 4
gpt4 key购买 nike

我有使用 CMake 构建的遗留 C++ 代码。它生成一个 .so文件。我需要用 Java 包装这段代码并构建一个 jar其中包括用于部署的 Java 代码和 C++。

使用 CMake 构建 C++ 代码的步骤很简单:

cd /to/pkg/dir
cmake .
make

.so文件在 build/ 下生成目录。如果我将整个项目转换为 Maven,我将不得不修改目录结构(这里有一篇博客文章解释了它是如何工作的:http://blog.bigpixel.ro/2012/07/building-cc-applications-with-maven/)。但是,我不想那样做。是否可以选择从 Maven 调用上面显示的前两行来构建 .so文件,然后将其包含在最终的 jar 中?

最佳答案

在 Apache Hadoop 中,构建会执行与您描述的类似的操作。 我们使用 Apache Maven AntRun Plugin在编译阶段对 cmake 进行外部调用,然后在 CMake 生成的构建输出上调用 make 以编译和链接我们代码库的 C 部分。然后,此输出会输入到我们最终的构建 Artifact 中。在我们的例子中,这些构建 Artifact 是 tarball,而不是直接捆绑到 jar 文件中,但您可以通过控制 Apache Maven JAR Plugin 的配置来完成它。 .具体来说,您可能需要覆盖内容 include/exclude settings .

如果您想将其用作起点,可以在此处查看 Hadoop 构建的相关部分:

https://github.com/apache/hadoop/blob/release-2.7.3-RC2/hadoop-common-project/hadoop-common/pom.xml#L598-L615

<execution>
<id>make</id>
<phase>compile</phase>
<goals><goal>run</goal></goals>
<configuration>
<target>
<exec executable="cmake" dir="${project.build.directory}/native" failonerror="true">
<arg line="${basedir}/src/ -DGENERATED_JAVAH=${project.build.directory}/native/javah -DJVM_ARCH_DATA_MODEL=${sun.arch.data.model} -DREQUIRE_BZIP2=${require.bzip2} -DREQUIRE_SNAPPY=${require.snappy} -DCUSTOM_SNAPPY_PREFIX=${snappy.prefix} -DCUSTOM_SNAPPY_LIB=${snappy.lib} -DCUSTOM_SNAPPY_INCLUDE=${snappy.include} -DREQUIRE_OPENSSL=${require.openssl} -DCUSTOM_OPENSSL_PREFIX=${openssl.prefix} -DCUSTOM_OPENSSL_LIB=${openssl.lib} -DCUSTOM_OPENSSL_INCLUDE=${openssl.include} -DEXTRA_LIBHADOOP_RPATH=${extra.libhadoop.rpath}"/>
</exec>
<exec executable="make" dir="${project.build.directory}/native" failonerror="true">
<arg line="VERBOSE=1"/>
</exec>
<!-- The second make is a workaround for HADOOP-9215. It can
be removed when version 2.6 of cmake is no longer supported . -->
<exec executable="make" dir="${project.build.directory}/native" failonerror="true"></exec>
</target>
</configuration>
</execution>

关于java - 使用 CMake 和 Maven 构建 C++ 和 Java 代码并打包在一个 jar 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44639122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com