c++ - JNI 调用在我的 cpp 共享库中获取 basic_stringstream 声明的符号查找错误
问题描述
场景: CCPJNI.java 对我构建的 CPPJNI.cpp 进行 JNI 调用,包含在 libCCBJNI.so 中,cpp 代码正确执行,直到它到达字符串流声明,然后错误:java:符号查找错误:.../libCCBJNI.so:未定义符号: _ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev
CCBJNI.cpp . .
out << "写 0 \r\n"; std::ostringstream ss;cout << "写 1 \r\n"; . .
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
注意:除了字符串流之外,还有更多前面的代码和前面的输出可以确认 cpp 代码和标准库工作正常。
我正在使用在 Windows 上运行并为 Linux 构建的 Visual Studio 2019 构建 libCCBJNI.so
问题: 我该如何解决这个问题?stringstream 在单独的 cpp 共享库中吗?如果是这样,lib 名称是什么,我在哪里可以找到它?如何将它包含在我的构建和运行时中?
解决方案
看来是环境问题。在 Windows WSL 上重新安装 Ubuntu 并发出以下问题后: sudo apt update sudo apt install build-essential 它适用于没有未解析的符号
推荐阅读
- java - 如何在 JavaExec 任务类路径中包含插件依赖项?
- javascript - 承诺在节点 module.exports 中返回未定义
- java - Java While 循环 - 输出不显示
- java - DataJpaTest 与单个自动装配测试 bean
- c# - 如何调试 EF Core 2 CurrentValues.SetValues
- c++ - vector::size() 是否可能返回错误值?
- c - 未初始化的局部变量是静态的吗?
- variables - 为什么 Webpack SASS-loader 不在线性梯度规则中转换 SASS 变量?
- matlab - 在 MATLAB 的 If 语句中使用多个条件的问题
- angular - Angular 7/Jasmine:在服务中对 Observable 进行单元测试时出现问题