创建.so文件

时间:2012-10-21 05:30:10

标签: linux unix compilation solaris

有一个集合 - 文件扩展名为。: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创建方法本身,我对交流感兴趣。

2 个答案:

答案 0 :(得分:1)

你真的应该阅读GCC的文档。值得注意的是invoking GCCprogram library howto也很重要。

通常,一些构建器用于驱动构建。经常使用GNU make并且有一个很好的教程文档。如果您的Makefile - s很复杂,您可能还希望使用GNU remake来调试它们(remakemake的调试版本。)

您通常希望将每个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文件,但是你可能想从所有这些文件中创建一个。