链接错误创建共享库时

时间:2010-08-04 22:20:23

标签: java c++ linker shared-libraries

我目前有一些C ++代码,我想编译成一个共享库,我可以在运行时使用Java Native Interface(JNI)动态链接到Java应用程序。我面临的问题是 - 我试图在另一个库本身编译调用的C ++代码,利用了很多类和不同的头文件。当我尝试将其变成.dll文件时,我收到很多链接器错误(说我有未解析的外部符号 - 所有这些都属于我的C ++代码调用的源代码)。现在我不想将所有外部代码(实际上是一个名为VTK的库)复制到我自己的源代码中 - 我只想要一个具有自己的C ++代码功能的动态可链接库(这意味着它会需要能够仍然识别我不想复制的外部代码。

请随时提出任何重要问题。

2 个答案:

答案 0 :(得分:2)

你必须静态地链接另一个库(如果它是一个普通的静态库),或者动态链接它是一个DLL。没有其他方法可以确保链接器和加载器都能解析符号。

答案 1 :(得分:1)

当您链接Windows DLL时,您必须告诉它可以找到它使用但未定义的任何符号。如果链接到静态库,则该库的所有代码都将复制到DLL中。但是,如果链接到另一个DLL,该库的代码仍保留在DLL中,绑定到DLL中的所有代码都是指向另一个DLL的链接。因此,如果VTK作为DLL提供,您应该能够链接它而不是膨胀自己的DLL。一个棘手的部分是,对于给定的DLL,你实际上并没有链接到.dll文件本身,你链接到所谓的“导入库”,它通常具有与DLL和a相同的基本名称。 lib扩展。因此,如果VTK以VTK.dll文件的形式提供,您应该查找相应的VTK.lib文件,并将其添加到构建DLL的链接命令中。