【发布时间】:2010-09-26 20:04:57
【问题描述】:
您好, 我希望有人有耐心阅读这篇文章。我手头有一个设置,这让我有点困惑。我有一个由 Eiffel 编译器生成的 C 源代码目录。 我想使用 Java 的这个输出,所以我需要一个用于 JNI 的 DLL,我将在其中实现一些 JNI 函数。当我编译 C 代码时,它给了我一个静态库,它依赖于其他一些库。所以我的设置是:
myDLL.dll (C++) [依赖于--> staticLib.lib [依赖于--> (sharedlib1, sharedlib2...)
我的 C++ 项目是用 Eclipse CDT 编译的,我最终得到了 1 个 dll。 我可以毫无问题地使用 Java 中的这个 DLL 它在执行过程中只需要路径中的另一个 dll。静态库中的所有代码都编译到我的 dll 中,而对我的 DLL 的 Java JNI 调用又使用此代码。
我想使用来自另一个 C++ 项目的相同 DLL。但是,当我只链接到 DLL 时,链接器会抱怨找不到特定符号。此符号在静态库中声明为 extern,因此它必须位于静态库的依赖项之一中。
我可以将 DLL 链接并编译到 C++ 项目的唯一方法也是链接到静态库,该库首先包含在 DLL 中。所以我最终得到了一个 .exe,它包含两次静态库:一个在 DLL 中,另一个在 exe 中。
由于 Java 代码成功使用了 DLL,我知道静态库被编译成 DLL,但我无法避免在我的 C++ 应用程序中两次包含它。我也对两次包含同一个库感到紧张。在运行时如何处理事情?这会以意想不到的方式咬我吗?
您对管理此设置的建议将不胜感激。
最好的问候
自我介绍
【问题讨论】: