有一组带有 - 扩展名为.с 的文件: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 中。如何从他们那里创建 .so 文件(如果可能的话,在此命令中指定所有选项)?我对通过 JNI 方法创建 native 方法进行通信很感兴趣。
最佳答案
您真的应该阅读 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
添加include目录,或者-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)您可能会感兴趣。
关于linux - 创建.so文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12995277/