mac动态链接库的生成和使用

mac动态链接库的生成和使用,第1张

动态库名字为 libtestdylib

注意动态库的名字必须为 libxxxxdylib

-o 链接

-c 将c源文件编译成o目标文件,不进行链接

clang -c testc

生成动态库:

clang -shared testo -o testdylib

-l(小写L)后接xxxx 表示调用libxxxxdylib 库

如果库不在系统默认的目录下要使用-L后接路径 再接-lxxxxx

-I(大写i)后接路径,表示在此路径下寻找头文件 xxxxh

clang mainc -c

clang maino -L -l test -o main

-L 意思是在当前目录下(/)寻找库

/main

输出结果: JNI--test%

使用test2c作为动态库源文件

执行mian文件,输出 JNI--test222%

动态库的名字文字必须为: libxxxxdylib

一、ImageMagick介绍

ImageMagick是用C语言开发处理程序。可以对进行改变大小、旋转、锐化、减色或增加特效等 *** 作。对的 *** 作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。

ImageMagick 的官网是:>

JNI 的基本问题就是解决 Java 和 C++ 代码互相调用的通信问题,在 C++ 代码编写过程中最大的问题莫过于适应其中的代码编写规则,C++调用或是返回的内容必须遵守 JVM 和 C++ 代码的通信规则。C++ 调用 Java 的一般步骤如下:获得类:jclass cls = env->FindClass("com/ldq/Student");cls 可认为是类的句柄"com/ldq/Student" 就是类文件,注意不能用 "comldqStudent"获得方法:jmethodID mid = env->GetMethodID(cls,"<init>","()V");以上为构造函数,参数是 "<init>" "()V"jmethodID mid = env->GetMethodID(cls,"getAge","()I");以上为类的方法,第一个参数是类句柄,第二个参数是方法名字,第三个参数是签名标识 Java类型 符号 boolean Z byte B char C short S int I long L float F double D void V objects对象 Lfully-qualified-class-name; L类名; Arrays数组 [array-type [数组类型 methods方法 (argument-types)return-type(参数类型)返回类型 获得对象:jobject obj=env->NewObject(cls,mid);以上便获得了一个对象的句柄获得对象成员变量:jfieldID fid=env->GetFieldID(cls,"age","I");以上和获得类方法差不多 *** 作成员变量:jint a=env->GetIntField(obj,mid);age=age+10;env->SetIntField(obj,fid,a);返回:return obj;下面是本人练习的例子ExListjavaJava代码 package comldqlist; import javautilList; public class ExList { / @param args / public static void main(String[] args) { // TODO Auto-generated method stub Systemoutprintln("-------WifiManagertest()"); Systemoutprintln(WifiManagertest()); Systemoutprintln("-------WifiManagertestArray()"); String[] s1 = WifiManagertestArray(); for (int i = 0; i < s1length; i++) { Systemoutprintln(s1[i]); } Systemoutprintln("-------WifiManagertestObject()"); Systemoutprintln(WifiManagertestObject()ssid); Systemoutprintln(WifiManagertestObject()mac); Systemoutprintln(WifiManagertestObject()level); Systemoutprintln("-------WifiManagergetScanResultsA()"); ScanResult[] s2 = WifiManagergetScanResultsA(); for (int i = 0; i < s2length; i++) { Systemoutprintln(s2[i]ssid); Systemoutprintln(s2[i]mac); Systemoutprintln(s2[i]level); } Systemoutprintln("-------WifiManagergetScanResults()"); List<ScanResult> list = WifiManagergetScanResults(); Systemoutprintln(listget(0)ssid); Systemoutprintln(listget(0)mac); Systemoutprintln(listget(0)level); } } package comldqlist;import javautilList;public class ExList { / @param args / public static void main(String[] args) { // TODO Auto-generated method stub Systemoutprintln("-------WifiManagertest()"); Systemoutprintln(WifiManagertest()); Systemoutprintln("-------WifiManagertestArray()"); String[] s1 = WifiManagertestArray(); for (int i = 0; i < s1length; i++) { Systemoutprintln(s1[i]); } Systemoutprintln("-------WifiManagertestObject()"); Systemoutprintln(WifiManagertestObject()ssid); Systemoutprintln(WifiManagertestObject()mac); Systemoutprintln(WifiManagertestObject()level); Systemoutprintln("-------WifiManagergetScanResultsA()"); ScanResult[] s2 = WifiManagergetScanResultsA(); for (int i = 0; i < s2length; i++) { Systemoutprintln(s2[i]ssid); Systemoutprintln(s2[i]mac); Systemoutprintln(s2[i]level); } Systemoutprintln("-------WifiManagergetScanResults()"); List<ScanResult> list = WifiManagergetScanResults(); Systemoutprintln(listget(0)ssid); Systemoutprintln(listget(0)mac); Systemoutprintln(listget(0)level); }}

你不用拷贝进去的,只需要配置下就可以了:

你可以阅读一下这篇文章,包括了如何在Windows,Mac以及Android上创建jni动态链接库:>

使用Java编写GUI程序时,想注册设置全局系统级热键快捷键是一件相对困难的事情,多数人的解决方法是使用JNI,以及相关的项目如“jintellitype”,但这些要么非常复杂麻烦,要么就只支持Windows,而这就失去了Java跨平台的特性!本文将介绍一种基于JNA的方法,不仅支持Windows,而且还支持Linux(基于X11的系统)和Mac OSX。

以上就是关于mac动态链接库的生成和使用全部的内容,包括:mac动态链接库的生成和使用、mac imagemagick 怎么安装、为什么JNI中的GetMethodID总是返回0-CSDN论坛等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10089648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存