JAVA调用C++ dll文件之JNI接口研究——分布函数计算

分别对VS平台运行GNU库和JAVA调用VS2010 x64位系统做过一定研究,接下来将试图生成一个调用概率统计函数的dll,将其嵌入JAVA程序中运行。

当准备生成带有正态分布函数的dll文件时,出现如下错误:

1>     正在创建库 d:\documents\visual studio 2010\Projects\GetNrompdf\x64\Debug\GetNrompdf.lib 和对象 d:\documents\visual studio 2010\Projects\GetNrompdf\x64\Debug\GetNrompdf.exp

1>GetNrompdf.obj : error LNK2019: 无法解析的外部符号 __imp_gsl_ran_gaussian_pdf,该符号在函数 Java_cn_dfinder_test_GetNormpdf_normpdf 中被引用

1>d:\documents\visual studio 2010\Projects\GetNrompdf\x64\Debug\GetNrompdf.dll : fatal error LNK1120: 1 个无法解析的外部命令

1>

1>生成失败。

1>

1>已用时间 00:00:00.93

========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========

初步猜测是lib文件放错了位置,将所有的include文件和lib文件都重新拷贝一份,到

没能解决问题

加入下列依赖库

依旧没有解决问题。

经过无数次调整确认,在64位编译环境下,失败

32位编译环境下,dll成功。

1>     正在创建库 E:\VS2010Projects\GnuDllTest\x64\Debug\GnuDllTest.lib 和对象 E:\VS2010Projects\GnuDllTest\x64\Debug\GnuDllTest.exp

1>GnuDllTest.obj : error LNK2019: 无法解析的外部符号 gsl_ran_gaussian_pdf,该符号在函数 Java_cn_dfinder_test_GetNormpdf_normpdf 中被引用

1>E:\VS2010Projects\GnuDllTest\x64\Debug\GnuDllTest.dll : fatal error LNK1120: 1 个无法解析的外部命令

1>

1>生成失败。

怀疑与GNU系统自带的dll或者lib版本有关。需要重新编译一下他们的版本。

http://www.heybody.com/2013/09/call-32-dll-x86-in-x86-system.html

有点像我的情形。

JAVA调用C++ dll文件之JNI接口研究——分布函数计算

时间: 2024-10-08 16:59:08

JAVA调用C++ dll文件之JNI接口研究——分布函数计算的相关文章

[JNI] Java 调用 C++ dll

首先介绍一下JNI吧! JNI 是Java提供的一个用于调用本地接口的接口层,位于Java代码 和 本地代码之间的一层:主要功能是 数据类型的转换,还有就是通过这一层来调用本地代码! 下面就说说Java 调用 C++  dll是怎么实现的吧! 1.首先用Java代码制作接口层 package NEU.SOFT; public class NEUdll { public NEUdll() { } //供Java调用的本地代码 public native char[] Descrypt(boolea

JNI java调用动态链接库dll

现在做的项目中就用到了JNI调用c语言实现的访问设备的dll文件,在此之前对JNI是一窍不通哈,只听说过JNA链接dll,但只是一个了解. JNI(Java Native Interface)Java本地接口,主要作用是实现java代码与C C++编写的代码交互. 理论不多说,还是看java链接dll具体操作吧..如下: 以下实例为java中调用connection.dll文件中的 open()方法. 1,java方 1)装载dll文件 有两种方式System.load();和System.lo

vs2013 调用只有dll文件的动态库(三)

当dll内包含多个算法时,我们的动态库dll项目创建与编译还可以简洁化如下: 源文件Windll.cpp: 1 #include"Windll.h" 2 int add(int x, int y) 3 { 4 return x + y; 5 } 6 int mult(int x, int y) 7 { 8 return x*y; 9 } 头文件Windll.h: 1 #ifndef LIB_H 2 #define LIB_H 3 #define DLL_API extern "

java调用c++ dll出现中文乱码

最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下解决的方法. java中传入一个字符串,调用c++代码将字符串输出 public class CommonUtil { static { System.loadLibrary("nativeTest"); } public native static void Print(String s

java调用C++ DLL库方法

最近一个项目要开发网页端人脸识别项目,人脸识别的算法已经写好,是C++版,但是网页端要求使用Java后台,这就涉及到Java调用DLL的问题.经过查找,实现了一个简单的例子. 1.第一步,先在Java中新建一个类 如上图,其中注意这句System.loadLibrary("javaCallcpp");,这就是加载dll文件的代码了.然后我们需要dll中实现下面定义的加减乘除方法. 2.编译文件,文件名为Java2cpp.java,首先编译成class文件,如果用的是eclipse,这个

利用vs2010制作C语言 dll文件,并在其它程序中调用该dll文件

一.为什么需要dll 代码复用是提高软件开发 效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架, 如ATL.MFC等,它们都以源代码的形式发布.由于这种复用是“源码级别”的,源代码完全暴露给了程序员,因而称之为“白盒复用”.“白盒复用”的缺点 比较多,总结起来有4点. 暴露了源代码: 容易与程序员的“普通”代码发生命名冲突: 多份拷贝,造成存储浪费: 更新功能模块比较困难. 实际上,以上4点概括起来就是

C#调用C++ DLL 文件

说来惭愧,都注册一年多了,却没有发表过一篇正式的博文,中间很多学习的过程也没有记录下来.如今到了一个新的环境,也有了学习的机会,一定要把每天的收获记录一下. 要做的东西需要引用C++编写的DLL,刚开始从网上看到觉得挺麻烦的就没有仔细研究,如今看到别人写的文章,感觉也不是多难.下面分享一下: 1.整一个DLL 使用C++创建一个动态库项目,应用程序设置中选择“DLL” 打开CPPDemo.cpp文件,添加如下代码 #include "stdafx.h"extern "C&qu

对C#调用C++ dll文件进行总结

在实际项目工作中,经常用到C#调用C++ 或者C编写的dll文件. dll支持一般函数声明和类的定义声明,但是一般为了简化,都是 采用函数声明的方式.这里主要并不是写 dll的编写. 先在vs中创建一个dll项目 添加一个新的cpp文件 测试代码如下: struct Student   //定义了一个结构体,结构体中包含了基本类型,字符串类型和数组,基本上能满足很多情况了{ int no; char name[10]; int score[4];}; extern "C" __decl

VS2010 C#调用C++ DLL文件 【转】

http://www.soaspx.com/dotnet/csharp/csharp_20110406_7469.html 背景 在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用.本篇文章将引导你快速理解这个调用的过程. 步骤 1. 创建一个CSharpInvokeCPP的解决方案: 2. 创建一个C++的动态库项目: 3. 在应用程序设置中,选择“DLL”,其他按照默认选项: 最后点