有一个集合 - 文件扩展名为。:avl_tree.c,buf_read.c,db_prep.c,file_process.c,global_header.c,traverser.c。使用的包含文件位于文件夹/ usr / gcc / 4.4 / bin / include中,除了jni.h,库位于文件夹/ usr / gcc / 4.4 / bin / lib中。如何从他们创建文件(如果可以指定此命令中的所有选项)?通过JNI创建方法本身,我对交流感兴趣。
答案 0 :(得分:1)
你真的应该阅读GCC的文档。值得注意的是invoking GCC。 program library howto也很重要。
通常,一些构建器用于驱动构建。经常使用GNU make并且有一个很好的教程文档。如果您的Makefile
- s很复杂,您可能还希望使用GNU remake来调试它们(remake
是make
的调试版本。)
您通常希望将每个C源文件编译为position independent code,因为shared objects具有PIC代码。你可以使用
gcc -Wall -fPIC -o foo.pic.o foo.c
将C源foo.c
编译到与位置无关的对象文件foo.pic.o
中,您可能需要一些其他编译器选项(例如-I
来添加包含目录,或-D
定义一些预处理器符号,-g
用于调试,-O
用于优化。
我强烈建议使用-Wall
启用几乎所有警告(以及改进代码,直到没有给出警告;这会提高代码的质量)。
然后,您必须使用
将所有这些*.pic.o
文件链接到一个共享对象中
gcc -shared *.pic.o -o foo.so
您可以将一些共享库链接到共享对象。
您可能需要阅读Levine's book on linkers and loaders
当然,如果你使用GNU make
,你的Makefile
中就会有所有这些规则。
您也可以使用GNU libtool。
也许dlopen(3)会让你感兴趣。
答案 1 :(得分:0)
这个问题应该提供更多信息。
大多数源集都有Makefile,configure脚本或其他一些项目来设置输出(你想要的.so库)。
gcc -dynamic -o file.so file.c
将从其中一个源文件创建一个so文件,但是你可能想从所有这些文件中创建一个。