在Linux平台下使用JNI(转)

From:http://www.ibm.com/developerworks/cn/java/l-linux-jni/
在Linux平台下使用JNI
级别: 初级

张翼翔 李庆明,

2002 年 10 月 29 日

本文简要介绍了JNI调用规范,及常用函数。并通过具体示例程序展示了实现一个本地调用的基本步骤。

引言

Java 的出现给大家开发带来的极大的方便。但是,如果我们有大量原有的经过广泛测试的非Java代码,将它们全部用Java来重写,恐怕会带来巨大的工作量和长 期的测试;如果我们的应用中需要访问到特定的设备,甚至是仅符合公司内部信息交互规范的设备,或某个特定的操作系统才有的特性,Java就显得有些力不从 心了。面对这些问题,Sun公司在JDK1.0中就定义了JNI规范,它规定了Java应用程序对本地方法的调用规则。

回页首

实现步骤及相关函数使用

本文将一步步说明在Linux平台下如何实现本地共享库与Java协同工作。Hello World程序是目前标准的入门第一步,那么,我也以类似的应用最为样例。

第一步,定义一个 Java 类 — Hello. 它提供SayHello方法:

此时应注意两点:

1.为要使用的每个本地方法编写本地方法声明,其声明方式与普通 Java 方法接口没什么不同,只是必须指定 native 关键字,如下所示:

public native void SayHello(String strName);

在这个函数中,我们将根据传进的人名,向某人问好。

无线网卡TL-WN321g+配置方法

详见:http://gentoo-pjq.vicp.net/bbs/viewtopic.php?f=6&t=55&sid=58ac702483a8c38a5e527b35f2ed97f0

http://www.linuxsir.org/bbs/thread348367.html
http://www.gentoo-wiki.info/RT73
驱动下载地址,下载最新的,不然编译会有问题:
http://www.ralinktech.com.tw/Home/Support/Linux.html
http://www.ralinktech.com.tw/data/drivers/ReleaseNote-RT73STA-v1102.txt
http://www.ralinktech.com.tw/data/drivers/2009_0206_RT73_Linux_STA_Drv1.1.0.2.tar.bz2

安装过程参照了wiki上过程:http://www.gentoo-wiki.info/RT73
[code]#cp RT73_Linux_STA_Drv1.0.4.0.tar.gz /tmp/
#cd /tmp/
#tar zxvf RT73_Linux_STA_Drv1.0.4.0.tar.gz
#cd /tmp/RT73_Linux_STA_Drv1.0.4.0/Module/
#cp Makefile.6 ./Makefile

Note: you need to modify the Makefile to make the DEVICE(rausb0) to wlan0

# sudo -i
# chmod 755 …

gdb如何批量设置断点

由于gdb不能够保存设置的断点,所以我们只有用-x 参数导入一个相当于批处理的文件来设置断点了

我先用ctags来生成tag文件:

代码:
pjq@gentoo-pjq ~/svn/gsopcast-read-only/src $ ctags -f gsopcast.tag *.cc

然后再用命令解析出其中的函数:

代码:
cat gsopcast.tag |grep “(“|cut -d “/” -f2|cut -d “(” -f1|cut -d ” ” -f2|awk ‘NF>0’|sed ‘s/\^//g’|sed ‘s/\*//g’|sed ‘s/^/b /g’>bp.list

这样就生成了设置所有函数断点的文件了:

代码:
pjq@gentoo-pjq ~/svn/gsopcast-read-only/src $ cat bp.list
b

写了一个利用sp-sc-auth看网络电视的脚本

详见:http://gentoo-pjq.vicp.net/bbs/viewtopic.php?f=2&t=37&p=44&sid=492a625a38a1fd9af6983039d5443c01#p44

pjq@gentoo-pjq ~/sopcast $ cat psop.sh
#!/bin/sh
#pjq@gentoo-pjq.vicp.net
#USAGE:
#./psop.sh tvname
#example:
#./psop.sh cctv-1
#then you can use mplayer to play the tv
#mplayer http://127.0.0.1:8908

#define const
GCHLXML=/tmp/gchlxml
ITEM=/tmp/item
NAME=/tmp/name
TEMP=/tmp/tempfile
TV=$1
#Get the gchlxml if no existing file

USE标记

USE标记

在管理 USE 标记之前,我们首先要区分 全局 与 本地 的概念。
全局标记,顾名思义,就是系统软件包或绝大部分软件包都会依赖的标记。
本地标记,是针对安装的软件包不同,可自由定制的标记。

当前可用的全局USE标记列表可以在 /usr/portage/profiles/use.desc文件里找到。

当前可用的局部USE标记列表可以在 /usr/portage/profiles/use.local.desc 文件里找到。

BTW, 建议安装 gentoolkit 里, 使用里边的 euse -i 命令来查看详细信息.

添加,修改,删除全局 USE 标记, 我建议改在 /etc/make.conf

而针对本地标签, 则通过制定软件包+标签的方式, 定义在 /etc/portage/package.use 里.

这样的可以有效区分全局和本地, 使其工作在不同的作用域下.

另外, 针对单个软件包, 还可以进行临时的 增删改 USE …

apache反应很慢原因分析

http://gentoo-pjq.vicp.net/bbs/viewtopic.php?f=2&t=14&sid=808d89ab6c9c752772f4b29fddeed069

今天下班回到宿舍,就发现apache访问很慢,即使是用本地地址192.168.0.160访问也是一样,这个就排除了是网络的原因了,搜了一番也没找到什么原因。
然后就查看LOG
tail -f /var/log/apache2/error_log

发现里面都是相同的内容:

[Tue Feb 10 22:52:51 2009] [notice] child pid 7887 exit signal Segmentation fault (11)
[Tue Feb 10 22:52:51 2009] [notice] child pid 7888 exit signal Segmentation fault (11)
[Tue Feb 10 22:52:51 2009]

申请了一个域名,架了一个服务器,欢迎大家访问

http://gentoo-pjq.vicp.net
http://gentoo-pjq.vicp.net/bbs/viewt…9e580e2b1072a4

用的是LAMP

就用的宿舍原来的电脑。

域名:http://gentoo-pjq.vicp.net/

用PHPBB3建好了论坛:

http://gentoo-pjq.vicp.net/bbs/

用postfix,dovecot建好了Mail服务器,SMTP/IMAP,POP3暂不支持。用SquirrelMail建好了Webmail,直接用浏览器访问:

http://gentoo-pjq.vicp.net/webmail/

用Wordpress建好了Blog:

http://gentoo-pjq.vicp.net/blog/

用vsftp架了ftp服务器(ftp://gentoo-pjq.vicp.net/),但外网访问不能列出文件列表,于是就直接将目录mount到apache下,用http下载:

http://gentoo-pjq.vicp.net/ftp/

由于是用花生壳申请的免费域名,有时花生壳会出现问题,导致域名不能解析,

所以最好的方法是直接用IP地址访问。由于外网IP地址是动态获得的,不能固定。所以最好的方法是定时发mail通知大家实时的IP地址,然后直接用IP访问。我已经写了脚本会定期发送mail通知大家,所以只要把mail地址给我就行了。…

两个find命令

1. find ./ -iname “*.bid” -exec cp  {} bid/ \;

将目录下所有匹配的文件copy到一个目录下,不包含路径。

或:find ./ -iname “*.bid” -exec cp  -t  bid/ {} +

2.find ./ -iname “*.bid” -exec tar cvzf bids.tar.gz  {} +
将目录下所有匹配的文件打包,包含对应的路径。

http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=108619…

[原创]clean up world file 脚本

发在这里了

http://www.linuxsir.org/bbs/thread342035.html

每次清理world file都要去找那一堆命令,之前找到英文版的在这里

现在我将主要过程写在一个脚本里了,下次只要执行一下这个脚本就行了。
用wgetpaste贴在了这里

主要会执行如下步骤:

代码:
echo "***********************************************" echo "The system will do the follow steps automaticly:" echo "1.cp /var/lib/portage/world ~ && >/var/lib/portage/world" echo "2.regenworld" echo "3.emerge --depclean -p" echo "4.emerge --depclean" echo "5.emerge

给内核patch中文补丁

以前在终端下要显示中文都要另外再安装zhcon,大概知道也有中文补丁但一直没有在意,今天在linuxsir上无意中看到了一个中文补丁的贴子,就想试试.
之前没打过补丁,所以先搜了一下patch的用法,下面是我的大概操作过程:
1.先将补丁(*.patch)解压放到/usr/src/linux 下面
2.patch -p1 <*.patch
这样就差不多算打上了,但我这里有一个错误,后来搜了一下,需要手动patch那个error:
grep “^+” *.c.rej|sed ‘s/^+//g’ >>*.c
然后再把加的这部分代码提到#include <>下面去.
然后再编译一下,copy内核,用新内核引导到终端,ls 一下,可以正常显示中文了.

Gentoo内核昨天又升级了(NVIDIA驱动也升级了),直接从2.6.26-r4干到了2.6.27-r7,升级真多,前两天圣诞2.6.28的内核才刚出来,下面是简易升级过程:
1.emerge -uDN world
2.将原先的/usr/src/linux 软链接删掉,
然后将新内核链接过去
3.拷贝一下先前的.config到新的内核目录下.
4.然后make menuconfig,一般我都不需要重新配置了,然后直接保存就行了,这种有可能会有问题,但我一直是这样操作的,现在也没有发现什么问题.
5.然后再time make
6.OK,编译成功,
make modules_install,
拷贝新内核,成功引导系统.
7.进入系统,再重新编译相关模块
modules-rebuild rebuild
这里一般不会太多,主要是一个显卡驱动,还有VirtualBox 模块.
8.至此一个内核的升级就基本完成.

然后再照着上面的方法patch上了中文补丁,ls