未定义的符号:_ZTTN2cv4SURFE
undefined symbol: _ZTTN2cv4SURFE
我想使用JNI从java调用C++代码。我已经学习了很多关于这方面的教程,当C++代码"简单"时,所有教程都在工作。但是我要调用的C++代码包含了opencv库并使用了它的各种函数。这就是我遇到问题的地方。。。我正在做的是:
1.)g++-fPIC-共享-I/usr/lib/jvm/java-1.7.0-openjdk-i386/include-I/usr/lib/Jjvm/java-1.7.0-oopenjdk-i86/include/linux-o libHello.so Hello.cpp
从而创建.so文件。
2.)我将创建的.so文件复制到我使用它的目录中,就像我在教程中所做的那样,并加载它:
static {
System.loadLibrary("Hello");
}
但我得到了一个未定义符号的UnSatisfiedLinkError:_ZTTN2cv4SURFE
最有可能的是,在第一步中出现了一个错误,以至于它找不到我的opencv库。但我不知道正确的命令是什么
ldd-d libHello.so生成:
linux-gate.so.1 => (0xb777d000)
libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb765e000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7640000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7496000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb746a000)
/lib/ld-linux.so.2 (0xb777e000)
未定义符号:_ZTTN2cv4SURFE(./libHello.so)
未定义符号:_ZTV11CvStatModel(./libHello.so)
未定义符号:_ZTVN2cv24BackgroundSubtractorMOG2E(./libHello.so)
未定义符号:_ZTVN2cv4SURFE(./libHello.so)
未定义符号:_ZTV5CvSVM(./libHello.so)
编辑:
对于其他遇到同样问题的人:
1.)正如一些人提到的,我并没有链接到opencv库。
2.)但这还不够。我使用了这个命令,在一些教程中也有这样的操作:
g++-共享-I/usr/lib/jvm/java-1.7.0-openjdk-i386/include-I/usr/lib/jvm/java-1.0.0-openjdk-i386/ininclude/linux-I/usr/local/include/opencv-L/usr/local/lib-lopencv_nofree-lopencv_features2d-lopencv_core-lopencvc_higgui Hello.cpp-o libHello.so
这导致在进行"ldd"时出现未定义符号错误
我将命令更改为:
g++Hello.cpp-shared-I/usr/lib/jvm/java-1.7.0-openjdk-i386/include-I/usr/libr/jvm/java-1.7.0-oopenjdk-i86/include/linux-I/usr/local/include/opencv-L/usr/local/lib-lopenc_nonfree-lopencv_features2d-lopenv_core-lopen_v_higgui-o libHello.so
也就是说,我只是直接在g++后面写Hello.cpp,而不是在末尾。这就解决了问题。
我不知道为什么这个有效,而前一个无效。但也许有人能告诉我。
您可能需要指定一个到附加库的路径,以便JVM可以加载它们。向Java:添加一个参数
-Djava.library.path=/path/to/opencv/libs:/other/paths/as/needed
这个参数必须在类名之前,这样Java就知道它是JVM的参数,而不是程序的参数。
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- 未解析的外部符号_MsiLocateComponentW@12.
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号