Linux平台gcc和动态共享库的基础知识 收集

-1.[url]http://jyk.xidian.edu.cn/jpkcs/wclqlsy/jiangyi/qian-5.pdf[/url]
0.[url]http://hi.baidu.com/pigfanfan/blog/item/e4f884a4e9484ef09152ee42.html/cmtid/0c346d179c2af306c93d6db3[/url]

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

3.[url]http://www.iteye.com/wiki/blog/213035[/url]

10个最好的pdf库
4.[url]http://coolshell.cn/articles/309.html[/url]
步骤:
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 [color=red]bin/classes[/color] -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.后续看这里了,[url]http://mycoding.iteye.com/blog/954537[/url]


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

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

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


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

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

Linux下查看.so和可执行文件是否debug编译
[url]http://blog.chinaunix.net/uid-24690947-id-3057390.html[/url]
linux 动态库文件stripped属性理解
[url]http://blog.csdn.net/bitsjx/article/details/7454805[/url]
NDK动态库的调用
[url]http://www.cnblogs.com/zhangweia/archive/2010/09/16/1828176.html[/url]
[url]http://www.360doc.com/content/11/0304/15/3700464_98080624.shtml[/url]

libharu API
[url]http://libharu.org/wiki/Documentation/API/Document#HPDF_New.28.29[/url]

for loop initial declaration used outside C99 mode 解决
加选项: -std=c99
[url]http://blog.csdn.net/eclipser1987/article/details/6359089[/url]

编译libharu时libpng install prefix... configure: error: Can't find libpng headers解决
[url]https://groups.google.com/group/libharu/tree/browse_frm/month/2010-08?_done=%2Fgroup%2Flibharu%2Fbrowse_frm%2Fmonth%2F2010-08%3F&[/url]


libharu 编译步骤
1.先libpng
configure
make
install
2.在libharu
configure --with-png=[libpng安装位置]
注意libpng安装位置下必须有include目录,内有png.h,才可configure 通过

3.这里绝对是学习libharu的好地方。
[url]http://libharu.org/wiki/Documentation/Examples[/url]

比较牛了...ANSI C写出pdf的读写库。。。开始敬佩了这个日本人了...

4.由于提前将libharu编译成了shared library,安装到当前目录下的lib了....
故对demo程序的编译,我的命令如下:
gcc -o font_demo font_demo.c lib/libhpdf.dylib lib/libhpdf.a -Iinclude


5.安装libharu到php扩展。。。
[url]http://it.newnew.cn/it47206.aspx[/url]

6.不知道怎么回事,libharu 附带的demo的text_demo.c等类似的都会include一个grid_sheet.h,而grid_sheet.h内的print_grid方法没有实现,只是申明了一下,不明就里,总是报错。。。。由于对c不是很熟悉了

mac@MacmatoMacBook.local ~/c.lib/libharu-2.1.0/demo $  gcc -o chfont_demo -O2 -Wall chfont_demo.c  -lhpdf -lpng -lz -lm -lstdc++
chfont_demo.c: In function ‘main’:
chfont_demo.c:57: warning: unused variable ‘y’
Undefined symbols for architecture x86_64:
"_print_grid", referenced from:
_main in ccKbPVXn.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
mac@MacmatoMacBook.local ~/c.lib/libharu-2.1.0/demo $


浪费2个小时,手动将text_demo.c中的include "grid_sheet.h" 改成 grid_sheet.c",问题解决,编译通过了。。。。。可以顺利生成desktop的pdf了。。。。。

bingo


7.开始输出中文
先打预防针
[url]http://bbs.chinaunix.net/thread-1625692-1-1.html[/url]

中文输出:
[url]http://hi.baidu.com/blue_lirenlin/blog/item/d5ed191542af2005c83d6d6f.html[/url]
依照上文,修改日文输出,中文就可以用了。。中文输出的例子见本文附件

8.进行JNI修改,编译

[url]http://www.eefocus.com/article/10-08/2075521281836694.html[/url]


9.JNI调试
[url]http://blog.sina.com.cn/s/blog_7a4b93580100us8a.html[/url]

10.补课
[url]http://hi.baidu.com/pigfanfan/blog/item/e4f884a4e9484ef09152ee42.html/cmtid/0c346d179c2af306c93d6db3[/url]
参看上文+实验
shared library
我的理解就是运行时,需要so配合

static library
就是运行时,不需要a配合,删除static library依然可以运行。
-----------------------------------------------------------------
btw:safari的确比chrome在中文字符支持上更完美
[url]http://www.coolunix.com/messages/29025.html[/url]
上面的页面chrom乱码,safari没有。
-----------------------------------------------------------------

只要肯找英文的资料着实比中文的资料详实的多了。。。
[url]http://www.steveolyo.com/JNI/JNI.html[/url]
这么好的资料,真想打包下载,害怕那天无法访问了。。。

[color=red]NoResourceFoundExexcption,尽然是EditText的setText方法引起的.......[/color]

在百度blog找到了关于JNI_ONLOAD的答案:
[url]http://hi.baidu.com/black/item/2acbdbfffbd969743d198b91[/url]


[size=medium] [color=red]no rule to make target [/color][/size]
[color=blue]
1.一般是源文件的路径没有指定正确
2.多余了这个语句:LOCAL_PATH := $(call my-dir)
[/color]
[size=medium][color=red]commands commence before first target stop[/color][/size]
一般是 缺少 “/" 符号。。。都是Android.mk文件不正确引起的

11.md,100%都是路径的问题和源码p关系都没有,libharu模块成功编译。花了4天时间。。。真不容易啊。

12.jni读写文件
[url]http://blog.csdn.net/conowen/article/details/7525837[/url]


13.这东西不错,留着有用
[url]http://code.google.com/p/android-quill/[/url]


14.c语言排错
[url]http://welkinchen.pixnet.net/blog/post/13506597-assignment-discards-qualifiers-from-pointer-target-type[/url]

[quote]這個 warning 錯誤說明, 回傳值是一個 const 的類型,而你聲明使用的那個變數並不是 const, 舉例如下: u_char *p = pcap_next(**, **); 因為 pcap_next 回傳的是一個 const u_char* ,而這裡適用的卻是 u_char* ,因此編譯器會通知你,這裡有潛在的錯誤。
[/quote]

[color=red]管用,经典啊[/color]

gcc 编译抑制warning : -w
管用
[url]http://topic.csdn.net/u/20101027/09/96b852ba-c1b3-4293-a4e9-9b7a539f40b9.html[/url]
[color=orange]Android.mk 中抑制waring只需在LOCAL_CFLAGS处添加-w即可
[/color]
15.android项目源码
[url]http://www.cnblogs.com/love1025/[/url]


16.jni排错
request for member 'FindClass' in something not a structure or union
[url]http://topic.csdn.net/u/20110120/10/ef601a64-27fa-4a80-96be-39dbcb644cbc.html[/url]
c和c++对即C++中使用
env->FindClass("java/lang/String")


C中使用

(*env)->FindClass(env, "java/lang/String")


17.jni相对复杂
没有想像中那么简单容易实现
[url]http://java.sun.com/docs/books/jni/html/jniTOC.html[/url]

JNI WARNING: threadid=1 using env from threadid=
1.[url]http://stackoverflow.com/questions/8296691/vm-aborting-while-creating-two-threads-in-android-application[/url]
2.[url]http://stackoverflow.com/questions/9304185/how-to-call-java-function-from-c[/url]
3.[url]http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html[/url]

18.这里JNI讲的比较好
[url]http://my.unix-center.net/~Simon_fu/?p=833[/url]

19.
如何在JNI编程中使用logCat
[url]http://blog.csdn.net/zgjxwl/article/details/6234025[/url]

20.libharu在sdcard生成pdf成功。
奋战5天的成果,2012.5.29.,开源库libharu牛。

21.从sdcard读取pdf
我雷哥个去啊。。。。居然不支持pdf的read。。。。操蛋了。。。我 :oops:
22.libharu 专辑
[color=blue]向libharu库加入自定义字体:[/color]
[url]https://groups.google.com/group/libharu/browse_thread/thread/c81f7efe8e6c9dba#[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值