【问题标题】:JNI call gets symbol lookup error for basic_stringstream declaration in my cpp shared libraryJNI 调用在我的 cpp 共享库中获取 basic_stringstream 声明的符号查找错误
【发布时间】:2021-02-17 16:14:41
【问题描述】:

场景: CCPJNI.java 对 CPPJNI.cpp 进行 JNI 调用,我构建的 CPPJNI.cpp 包含在 libCCBJNI.so 中 cpp 代码被正确执行,直到它到达 stringstream 声明 然后错误: java:符号查找错误:.../libCCBJNI.so:未定义符号:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev

CCBJNI.cpp . .
out

Java 编译: javac -cp ccb.jar:/usr/lib/gcc/x86_64-linux-gnu/7/libgcc._s.so.1:libCCBJNI.so:json-simple-1.1.1.jar:azure-storage-4.2。 0.jar CCBTEST.java

javac -cp ccb.jar:LIBCCBJNI.so:json-simple-1.1.1.jar:azure-storage-4.2.0.jar com/shiseido/ccb/CCBJNI.java

Java 运行: java -cp .:/usr/lib/gcc/x86_64-linux-gnu/7/libgcc._s.so.1:ccb.jar:libCCBJNI.so:jackson-core-2.12.0-rc1.jar:json- simple-1.1.1.jar:azure-storage-4.2.0.jar CCBTEST

输出: . . 写 0 java:符号查找错误:/mnt/c/Users/robsc/pahub-linux/pahub_scantech_platform_jniCopy7/Platform_JNI/CCBJNI/gdb2/CCBJNI/Remix/Source/libCCBJNI.so:未定义符号:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev

注意:除了 stringstream 之外,还有更多前面的代码和前面的输出确认 cpp 代码和标准 libRARY 工作正常。

我正在构建 libCCBJNI.so,使用在 Windows 上运行的 Visual Studio 2019 并为 Linux 构建

问题: 我该如何解决? stringstream 在单独的 cpp 共享库中吗? 如果是这样,lib 名称是什么,我在哪里可以找到它?如何将它包含在我的构建和运行时中?

【问题讨论】:

  • ldd libCCBJNI.so 说什么?它应该显示对 libstdc++ 或等效项的依赖。
  • 谢谢,它显示了 basic_stringstream 的未解析符号:U std::__cxx11::basic_stringstream, std::allocator >::basic_stringstream(std ::__cxx11::basic_string, std::allocator > const&, std::_Ios_Openmode) ..重新安装所有我认为我的环境错误的东西后它现在可以工作了。一旦我知道它是什么,我会回答这个问题。

标签: c++ linux visual-studio java-native-interface shared-libraries


【解决方案1】:

看来是环境问题。在 Windows WSL 上重新安装 Ubuntu 并发出: sudo apt 更新 sudo apt install build-essential 它适用于没有未解析的符号

【讨论】:

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