日期:2014-05-16  浏览次数:20725 次

Linux平台gcc和动态共享库的基础知识 收集
-1.http://jyk.xidian.edu.cn/jpkcs/wclqlsy/jiangyi/qian-5.pdf
0.http://hi.baidu.com/pigfanfan/blog/item/e4f884a4e9484ef09152ee42.html/cmtid/0c346d179c2af306c93d6db3

1.http://fly-hyp.iteye.com/blog/213035
怎样创建动态连接库(shared library)/dlls?
2.http://www.iteye.com/topic/261176

3.http://www.iteye.com/wiki/blog/213035

10个最好的pdf库
4.http://coolshell.cn/articles/309.html
步骤:
1.首先在java类里申明native方法
例如:
 
package         com.macleo.jni;
public class    JNITest {

        public native String hello();
        public static void main(String[] args) {
                System.out.println("hell mac main method");

        }
}
  

2.javac 编译上面的JNITest.java,指定当前目录下生成class
javac -d . JNITest.java

于是会生成包结构的目录:com.macleo.jni.JNITest.class

3.用javah在当前目录下生成头文件
生成jni的头文件很麻烦,有时即便是位置不对也会报错。
例如,在jni的目录下会报这样的错:
mac@MacmatoMacBook.local ~/macleo/android.workspace/MyPdfWaterMark/jni $  javah -classpath bin/classes -d jni com.macleo.activity.MyPdfWaterMarkActivity
error: cannot access com.macleo.activity.MyPdfWaterMarkActivity
class file for com.macleo.activity.MyPdfWaterMarkActivity not found
javadoc: error - Class com.macleo.activity.MyPdfWaterMarkActivity not found.
Error: No classes were specified on the command line.  Try -help.
mac@MacmatoMacBook.local ~/macleo/android.workspace/MyPdfWaterMark/jni $  cd ..
mac@MacmatoMacBook.local ~/macleo/android.workspace/MyPdfWaterMark $  javah -classpath bin/classes -d jni com.macleo.activity.MyPdfWaterMarkActivity
mac@MacmatoMacBook.local ~/macleo/android.workspace/MyPdfWaterMark $


退至jni的上级目录,就可以了


javah -d . com.macleo.jni.JNITest

会在当前目录下生成一个com_macleo_jni_JNITest.h的头文件
md,
必须要这样:javah -classpath bin/classes  -d jni com.macleo.jni.JNITestActivity
不能缺少classes这个目录,cd。否则报错,无法生成h文件
4.javah生成头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_macleo_jni_JNITest */

#ifndef _Included_com_macleo_jni_JNITest
#define _Included_com_macleo_jni_JNITest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_macleo_jni_JNITest
 * Method:    hello
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_macleo_jni_JNITest_hello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif



5.后续看这里了,http://mycoding.iteye.com/blog/954537


==============================================
build libharu relative content
0.google group about libharu
https://groups.google.com/group/libharu/topics?gvc=2
1.http://stackoverflow.com/questions/9192465/libharu-complied-android-so-but-cant-load-library

2.Android.mk
http://blog.csdn.net/nkmnkm/article/details/7235764
http://www.cnblogs.com/zhangweia/archive/2010/09/16/1828176.html
3.由于libharu是用标准的C写的,所以编译成shared library很简单
https://groups.google.com/group/libharu/browse_thread/thread/1c910b664998bcfe/64bc037e9dd9ab99?lnk=gst&q=compile+ndk#

JNI官方比较全面的说明:
http://en.wikipedia.org/wiki/Java_Native_Interface
http://docs.oracle.com/javase/1.4.2/docs/guide/jni/



JNIExample for Android(pdf资料)
http://android.wooyd.org/JNIExample/files/JNIExample.pdf

如何为嵌入式开发建立交叉编译环境
http://www.ibm.com/developerworks/cn/linux/l-embcmpl/
Ubuntu11.04中搭建交叉编译环境(arm-linux-gcc-4.6.1版本
http://my.oschina.net/u/225867/blog/38473

Linux下查看.so和可执行文件是否debug编译
http://blog.chinaunix.net/uid-24690947-id-3057390.html
linux 动态库文件stripped属性理解
http://blog.csdn.net/bitsjx/article/details/7454805
NDK动态库的调用
http://www.cn