我如何说服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本地访问使用它时,我得到一个"符号未找到"错误。
查看由Makefile生成的libclique.la
,它似乎没有任何关键信息,只是看起来是链接过载和移动东西,以便于后续的C/c++编译器步骤(我没有),所以我希望libclique.1.dylib
是一个功能动态库。
我猜这就是我出错的地方,但是,考虑到JNA直接链接到一个dylib,而不是用它编译(根据上面引用的讨论中的示例),似乎LibTools手册中描述的所有后续编译步骤都是没有意义的。
注意:我正在Mac上进行测试,但我也必须在Windows和Linux机器上进行测试,这就是为什么我试图将其放入Automake。
注2:我正在使用Eclipse进行Java开发,是的,我确实导入了dylib。
谢谢
你应该构建一个插件,特别是通过
libclique_la_LDFLAGS = -avoid-version -module -shared -export-dynamic
这样你就告诉libtool你想要一个动态加载的模块,而不是一个共享库(对于ELF来说是一样的,但是对于Mach-O来说不是)