我需要从C ++运行Java,一般来说问题已经解决,但我的make系统或脚本出了问题,有一个创建JVM的C ++文件:

#include <jni.h>
#include <iostream>
#include <string> using namespace std; int main() {
JavaVMOption jvmopt[];
jvmopt[].optionString = const_cast<char *>("-Djava.class.path=."); JavaVMInitArgs vmArgs;
vmArgs.version = JNI_VERSION_1_2;
vmArgs.nOptions = ;
vmArgs.options = jvmopt;
vmArgs.ignoreUnrecognized = JNI_TRUE; // Create the JVM
JavaVM *javaVM;
JNIEnv *jniEnv;
long flag = JNI_CreateJavaVM(&javaVM, (void **)
&jniEnv, &vmArgs); return ;
}

有一个CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.12)
project(games_test_system) include_directories(/usr/java/jdk-10.0./include /usr/java/jdk-10.0./include/linux)
link_directories(/usr/java/jdk-10.0./lib /usr/java/jdk-10.0./lib/server) set(CMAKE_CXX_STANDARD ) add_executable(games_test_system main.cpp)

运行它:

/opt/clion-2018.2./bin/cmake/linux/bin/cmake --build /home/obabichev/CLionProjects/games-test-system/cmake-build-debug --target games_test_system -- -j 

得到这个错误:

[ %] Linking CXX executable games_test_system
CMakeFiles/games_test_system.dir/main.cpp.o: In function `main':
/home/obabichev/CLionProjects/games-test-system/main.cpp:: undefined reference to `JNI_CreateJavaVM'
collect2: error: ld returned exit status
CMakeFiles/games_test_system.dir/build.make:: recipe for target 'games_test_system' failed
make[]: *** [games_test_system] Error
CMakeFiles/Makefile2:: recipe for target 'CMakeFiles/games_test_system.dir/all' failed
make[]: *** [CMakeFiles/games_test_system.dir/all] Error
CMakeFiles/Makefile2:: recipe for target 'CMakeFiles/games_test_system.dir/rule' failed
make[]: *** [CMakeFiles/games_test_system.dir/rule] Error
Makefile:: recipe for target 'games_test_system' failed
make: *** [games_test_system] Error

回答:

CMakeLists.txt文件中,添加

find_package(JNI REQUIRED)
target_link_libraries(games_test_system ${JNI_LIBRARIES})

而不是手动选择目录也可以依赖CMake

include_directories(${JNI_INCLUDE_DIRS}

如何解决用CMake未定义引用`JNI_CreateJavaVM'?的更多相关文章

  1. Qt对`vtable的未定义引用

    错误描述:Qt在linux系统编译时,遇到一个错误大致如下形式 在 xxxxx函数中 对‘vtable for xxxxx未定义的引用 网上找了很多,各种情况都有,大多数是虚函数未实现导致的, 但也有 ...

  2. 【C语言】 Linux下编译提示pow未定义引用

    如下代码: #include <stdio.h> // 调用基本输入输出函数库 #include <math.h> #define PI 3.14 // 定义常量 float ...

  3. MinGW平台 openjpeg-2.1.0 静态编译后未定义引用的解决方法

    undefined reference to __imp_opj_xxx keyword: ffmpeg,openjpeg,OPJ_EXPORTS,OPJ_STATIC,opj_version,__i ...

  4. 解决p4c安装时protobuf未定义引用的错误

    安装好p4c的依赖之后,执行make -j2时出现以下问题: undefined references to `google::protobuf::internal::LogMessage::oper ...

  5. 关于一个多个.cpp文件的项目中,函数出现未定义引用错误

    编译的话,必须把全部的c文件都要编译的啊,只编译一个c算怎么个逻辑呢?编译实际上是2个过程,编译和链接.编译过程只检查所有的符号(变量,函数)有没有声明,即只需要h文件生命就够了.但是链接时候,需要找 ...

  6. gcc5.4报错对‘std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()’未定义的引用

    我在编译ligra是遇到了这个问题,网上搜了一遍,发现是了原因https://gcc.gnu.org/onlinedocs/libstdc%2B%2B/manual/using_dual_abi.ht ...

  7. 对‘TIFFReadDirectory@LIBTIFF_4.0’未定义的引用-------------- 解决办法

    ABLE_DEPRECATED' is defined [-Winvalid-pch] //usr/lib/libvtkIO.so.5.10:对‘TIFFReadDirectory@LIBTIFF_4 ...

  8. ASP.NET中母版页引用外部js或css文件无效,提示对象未定义解决方法

    最近做网站用了一个js+css实现的带有二级菜单的导航条,在母版页创建好后,子页面调用出现了许多奇怪的问题,多方查证后的最终解决方案和大家分享下.... 1.路径问题 如果是一个单独的aspx页面调用 ...

  9. [原创]如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase”

    如何解决IE10下CkEditor报 --- SCRIPT5007: 无法获取未定义或 null 引用的属性“toLowerCase” 错误 如果你的IE是IE10,且不是运行在IE的兼容模式你也许会 ...

随机推荐

  1. Springboot中读取.yml文件

    自定义配置文件application-dev.yml spring: dataresource: druid: driver-class-name: com.mysql.jdbc.Driver url ...

  2. Go标准库之读写文件(File)

    Go标准库之读写文件(File) 创建一个空文件 package main import ( "log" "os" ) func main() { file, ...

  3. Linux shell逐行读取文件的方法

    方法1:while循环中执行效率最高,最常用的方法. function while_read_line_bottom(){ while read line do echo $line done < ...

  4. 源码编译安装lnmp环境

    一.源码编译安装步骤 首先说明源码安装的好处   速度快,可自定义路径 主要有三步:1.配置 进入源码安装包  ./configure --prefix=/uer/local/nginx  可指定参数 ...

  5. BF算法(模式匹配)

    BF算法 (Brute-Force算法) 一种简单的模式匹配算法,目的是寻找模式串p是否在目标串s中有出现. 思想:先从第一个字符开始匹配,如果p[j]==s[i],那么继续向下比较,一旦不相等,即回 ...

  6. Linux_CentOS-服务器搭建 <七>

    设置Linux下Mysql表名不区分大小写 对linux安装mysql不熟悉的(查看我那一系列的文章第一篇): http://www.cnblogs.com/Alandre/p/3365535.htm ...

  7. UML介绍--用例图

    用例图定义:由参与者(Actor).用例(Use Case)以及它们之间的关系构成的用于描述系统功能的静态视图称为用例图. 用例图(User Case)是被称为参与者的外部用户所能观察到的系统功能的模 ...

  8. Python爬取网易云歌单

    目录 1. 关键点 2. 效果图 3. 源代码 1. 关键点 使用单线程爬取,未登录,爬取网易云歌单主要有三个关键点: url为https://music.163.com/discover/playl ...

  9. Python核心编程 | 浅谈闭包的使用

    1.函数的引用   >>> def test(): print('test:') >>> test <function test at 0x10ffad488 ...

  10. quartz配置参数org.quartz.jobStore.misfireThreshold含义解释

    配置定时任务参数 quartz.properties文件时 需要配置jobStore的超过时间数 默认为60秒(这里单位为毫秒) org.quartz.jobStore.misfireThreshol ...