如何使用JNI / JNA可以使用的automake创建共享库(dylib)?

时间:2013-01-07 20:43:31

标签: c shared-libraries jna automake libtool

如何说服LibTools生成一个与gcc自动生成的库相同的库?

如果我明确做事,这是有效的:

gcc -o libclique.dylib -shared disc.c  phylip.c Slist.c  clique.c
cp libclique.dylib [JavaTestDir]/libclique.dylib

但如果我这样做:

Makefile libclique.la (which is what automake generates)
cp .libs/libclique.1.dylib [JavaTestDir]/libclique.dylib 

Java找到了库但找不到入口点。

我读过“如何在automake脚本中创建共享库(.so)?”线程,它帮助了很多。我得到了一个用-shared标志创建的dylib(根据生成的Makefile)。但是当我尝试从Java Native Access使用它时,我得到一个“未找到符号”错误。

查看Makefile生成的libclique.la,它似乎没有任何关键信息,只是看起来是链接重载和移动事物,以方便后续的C / C ++编译器步骤(我没有,所以我希望libclique.1.dylib成为一个有效的动态库。

我猜这是我出错的地方,但是,鉴于JNA直接链接到dylib并且没有用它编译(根据上面引用的讨论中的示例),似乎所有后续的编译步骤在LibTools手册中描述的是没有实际意义的。

注意:我正在Mac上进行测试,但我也不得不在Windows和Linux机器上进行测试,这就是为什么我要把它放到Automake中。

注意2:我正在使用Eclipse进行Java开发,是的,我确实导入了dylib。

由于

1 个答案:

答案 0 :(得分:1)

你应该是building a plugin,特别是传递

libclique_la_LDFLAGS = -avoid-version -module -shared -export-dynamic

这样你告诉libtool你想要一个可动态加载的模块而不是一个共享库(对于ELF来说是相同的东西,但是对于Mach-O来说不是。)