如何说服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。
由于
答案 0 :(得分:1)
你应该是building a plugin,特别是传递
libclique_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
这样你告诉libtool你想要一个可动态加载的模块而不是一个共享库(对于ELF来说是相同的东西,但是对于Mach-O来说不是。)