2

如何说服 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 中使用它时,我得到一个“找不到符号”错误。

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

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

注意:我在 Mac 上进行测试,但我也必须在 Windows 和 Linux 机器上执行此操作,这就是我尝试将其放入 Automake 的原因。

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

谢谢

4

1 回答 1

2

您应该构建一个插件,特别是通过

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

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

于 2015-01-06T21:21:08.253 回答