静态链接库和JNI?

3
我正在计划一个应用程序,它将利用现有的第三方SDK提供的一组静态链接(.lib)C ++库。我想用Java编写自己的应用程序,因此我尝试将现有的SDK库加载到VM中。
然而,据我所知,JVM似乎只能使用动态链接库(.dll)。
这是真的吗?如果是,是否有可能解决方法 - 比如编译一个自己的.dll文件,链接到静态库?我对Java有相当多的经验,但对JNI和C / C ++都很陌生,因此任何回应或指引都将不胜感激,
谢谢!

@KevinPanko - 可能是,但你提供的链接没有提供任何有质量的答案。 - codenheim
@codenheim http://meta.stackoverflow.com/questions/253924/what-to-do-when-the-question-you-want-to-ask-is-a-duplicate请执行以下操作: 当您想要提出的问题是重复问题时,可以参考上述链接中的建议。 - Kevin Panko
没有看到那个帖子。谢谢提供参考。 - user3881521
1个回答

4
你说得对:JVM可以加载dll(通常在Java源代码中包含了用于加载它们的本机函数的启动代码)。但它无法加载lib。
因此,你需要创建一个静态链接到lib的dll。
通常的做法是运行程序javah来生成你需要实现的dll函数的存根。

+1 - 有一件事需要注意,经常情况下 .lib 只是一个指向 .dll 的链接库(存根)。因此,你最终会创建一个 dll,链接到另一个 dll 的链接库,但这大多是不可避免的,除非你有原始 lib 的源代码,以添加 Java 兼容的入口点。只需检查你的 .lib 是否完全包含,或确保你也获取了它的依赖项即可。通常文件大小就能揭示端倪(静态 .lib 将是可比较的,链接库将很小)。 - codenheim
哇,那真是太快了!感谢您的回复,非常有帮助。 - user3881521

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接