如何在Cygwin上使用cmake的FindJNI?

时间:2016-01-27 21:08:10

标签: java cmake java-8 cygwin swig

我有一些SWIG代码我在购买Visual Studio之前尝试在Cygwin上编译。我的CMakeList.txt在OSX上运行正常。在Windows上,我安装了Cygwin的cmake 3.3.1版本,我从Oracle安装了最新的jdk并运行了以下CMakeLists.txt(.lib后缀被注释,因为它没有帮助):

cmake_minimum_required(VERSION 2.8.9)
project(myproject)

#set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib")

find_package(Java COMPONENTS Development)
find_package(JNI REQUIRED)

但是这个输出很窒息:

....
-- Found Java: /home/user/jdk/bin/java.exe (found version "1.8.0.71")
CMake Error at /usr/share/cmake-3.3.2/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find JNI (missing: JAVA_AWT_LIBRARY JAVA_JVM_LIBRARY)
Call Stack (most recent call first):
  /usr/share/cmake-3.3.2/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.3.2/Modules/FindJNI.cmake:287 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:20 (find_package)


-- Configuring incomplete, errors occurred!

这是我.bash_profile中的以下几行:

export JAVA_HOME="/home/user/jdk"
export JAVA_AWT_LIBRARY="$JAVA_HOME/lib/jawt.lib"
export JAVA_JVM_LIBRARY="$JAVA_HOME/lib/jvm.lib"

反映了我已尝试过的一些事情。 JDK在我的主目录中的原因是因为我试图查看问题是否是/cygdrive/c/Program Files/Java/jdk1.8.0_71的原始安装路径中的空间,但是我在两个位置都得到了相同的错误。

这应该有用吗?

1 个答案:

答案 0 :(得分:0)

啊,我刚刚想出了一个解决方案。这些线条似乎在一起解决它:

set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a" ".a" ".lib")

虽然我不确定为什么我需要自己设置它们。

[编辑] 我买了Visual Studio并遇到了类似的问题。在这种情况下,虽然它找到了Java,但除非我特意选择了Win64生成器,否则它找不到JNI。