SWIG生成的java代码不能在64位Solaris上处理异常
SWIG generated java code not handling exceptions on 64 bit Solaris
我正在使用swig从c++生成java代码。c++代码抛出异常。无论在32位还是64位代码中,它们都可以在Windows上被捕获。它在32位Solaris上也运行良好。然而,在64位Solaris上,c++代码中出现的任何异常都不会被Java程序捕获。
这是java产生的调用栈的相关部分。这里的CheckThrowError是c++库中抛出异常的函数。
tack: [0xfffffd7ffd34f000,0xfffffd7ffd44f000], sp=0xfffffd7ffd44e4f8, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C 0x00000000000ad7c5
C [libc.so.1+0xe18a9] _Unwind_RaiseException+0x46
C [libstdc++.so.6.0.3+0xdc74e] __cxa_throw+0x5e
C [libcsclientswig.so+0x552e9] CheckThrowError(ATLAS::blob_status)+0x37
我正在使用gcc 3.4.3。这里的CheckThrowError是库中抛出异常的函数。
我将非常感谢任何指导,试图解决这个问题。
我发现了这个问题,以防其他人遇到它。从本质上讲,Java使用的solaris C运行时与用于构建c++库的GCC运行时的异常处理是不同的,这导致无法捕获异常。修复它的方法包括强制首先加载GCC运行时,从而导致正确的异常处理。我使用LD_PRELOAD环境变量。
export LD_PRELOAD=/usr/sfw/lib/amd64/libgcc_s.so
在此之后,Java代码能够处理源自c++的异常。为什么这不是32位的问题,我不知道
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件
- 在 solaris x86 上不支持 64 位
- Boost1.44.0文件系统v3无法在solaris Sparc 64位平台上正常运行
- SWIG生成的java代码不能在64位Solaris上处理异常
- Solaris 10 - 在 32 位 GDB 工具上调试 64 位C++应用程序