【问题标题】:JNI issue: symbol lookup error by FileHandle in C++ DLLJNI 问题:C++ DLL 中 FileHandle 的符号查找错误
【发布时间】:2012-07-03 12:09:06
【问题描述】:

我制作了 JNI 函数,并成功地将它们与 c++ 动态库链接。我让它们都工作得很好,但是我遇到了一个函数的问题,我在用于从文件读取数据的 c++ 中使用的 FileHandle 类中出现符号查找错误。 知道它在一个普通的 c++ 项目上工作,但不在 DLL 中。

/usr/lib/jvm/jdk1.7.0/bin/java:符号查找错误:/home/.../NetBeansProjects/TRIOGUI/dist/libNativeAdd.so:未定义符号:_ZN5Gdsii9GdsParserC1EPKcN7SoftJin10FileHandle8FileTypeEN5boost8functionIFvS2_ESaIvEEE Java 结果:127

有人可以帮帮我吗? :)

【问题讨论】:

  • 您应该提供您正在使用的代码...在 Java 和 C++ 端。
  • 这是我在项目中使用的库中的一个函数。我在项目属性中的 c++ 编译器中引用了它,并且该库在正常项目中的所有函数都可以正常工作,但是当我将项目设为 DLL 文件时,我制作的所有函数和本机函数都可以正常工作,除了这个功能。

标签: java c++ dll java-native-interface filehandle


【解决方案1】:

我发现你的符号非常可疑。不正确的修饰。你是如何得到的?它是从某个地方复制和粘贴吗?你有没有尝试破解它? 10FileHandleF8ileType 应该是 10FileHandle8FileType。然后它变成一个有效的符号Gdsii::GdsParser::GdsParser(char const*, SoftJin::FileHandle::FileType, boost::function >)

【讨论】:

  • 是的,您对 10FileHandle8FileType 的看法是正确的,我对其进行了编辑。是的,这是 GDSParser 类中的一个函数,我给了它正确的参数。在普通的 c++ 项目中,它可以正常工作,但是当我在 DLL 中使用它时,它给了我这个错误:(
  • “编辑”是什么意思?那么作为 SO 文件中的符号是否正确?
  • 我认为您必须解释什么是您所说的完全正常工作的“正常项目”。如果它是静态链接的应用程序,那么您可能只是错误地设置了 DLL 的搜索路径。
【解决方案2】:

我找到了问题,谢谢大家。 我使用的库有一个库文件“somefile.a”,我在库文件夹中缺少该文件。 我得到了这个库,将它包含在项目中,它运行良好:)

再次感谢大家的帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多