CMake 访问 SWIG 并将 java 库链接到现有 C++ 项目的问题

Posted

技术标签:

【中文标题】CMake 访问 SWIG 并将 java 库链接到现有 C++ 项目的问题【英文标题】:Problems having CMake access SWIG and link a java library to an existing C++ project 【发布时间】:2011-07-27 17:22:32 【问题描述】:

我正在修改用 C++ 编写的现有开源项目的 CMake 文件,以尝试将其链接到 SWIG Java 接口文件。我从其他论坛拼凑和修补的代码是这样的:

    FIND_PACKAGE(SWIG REQUIRED)
    INCLUDE($SWIG_USE_FILE)
    INCLUDE_DIRECTORIES($JAVA_INCLUDE_PATH)
    INCLUDE_DIRECTORIES($CMAKE_CURRENT_SOURCE_DIR/avogadro/src)
    SET(CMAKE_SWIG_FLAGS "")
    SET_SOURCE_FILES_PROPERTIES(mainwindow.i PROPERTIES CPLUSPLUS ON)
    SET_SOURCE_FILES_PROPERTIES(mainwindow.i PROPERTIES SWIG_FLAGS "-includeall")
    SWIG_ADD_MODULE(mainwindow java mainwindow.i mainwindow_wrap.c)
    SWIG_LINK_LIBRARIES(mainwindow $JAVA_LIBRARIES)

我写的/发现的有什么问题吗?当我运行 cmake 命令时,它会构建。然而,当我运行 make -j3 (稍后我需要这样做以访问新集成的库)时,它崩溃了,给出了非常模棱两可的错误消息“make: * [all] Error 2”

谢谢!

【问题讨论】:

我不知道这段代码有什么问题(如果有的话),但是您可以通过使用“make VERBOSE=1”查看在错误之前执行的命令可能导致崩溃的命令/崩溃... @DLRdave,是的。我注意到这个“jni.h:没有这样的文件或目录”在最后。所以,希望我需要做的就是设置 JVM 路径。我是 CMake 的新手,所以我正在寻找代码以最好的方式做到这一点。 我通过在 set source properties 命令中添加包装器和接口文件的完整路径来解决我的特定问题。为了指向 jni.h,我在开头添加了“FIND_PACKAGE(JNI REQUIRED)”。 既然你已经找到了“答案”……你应该回答你自己的问题,然后接受它作为正确答案。 【参考方案1】:

我通过在 set source properties 命令中添加包装器和接口文件的完整路径来解决我的特定问题。为了指向jni.h,我在开头添加了FIND_PACKAGE(JNI REQUIRED)

【讨论】:

以上是关于CMake 访问 SWIG 并将 java 库链接到现有 C++ 项目的问题的主要内容,如果未能解决你的问题,请参考以下文章

CMake、SWIG 和共享库

CMake Swig:如何在包含的 .i 文件上添加依赖项

CMake 有没有办法利用“swig -MM”生成的依赖项?

通过 SWIG 链接 C++ 和 Java GUI

CMake Pkg-Config 库链接路径

CMake 错误:找不到 SWIG(缺少:SWIG_DIR)