我已将 32 位 Motif 应用程序(从 SLES 10 SP1)移植到 64 位 SLES 12 SP3。由于专有库 (XRT),我被迫在 32 位平台 (SLES 11 SP3) 上编译并静态链接 Motif(XRT 已经静态链接)。这工作正常。
然后,我尝试在 SLES 12 SP4 上运行完全相同的二进制文件,除了不呈现.xbm 文件之外,这也有效。请参见下面的示例图像,其中包含 (SLES 12 SP3) 和不包含 (SLES 12 SP4) 呈现的 .xbm 文件:
我得到的错误是:
Warning: Cannot convert string "range30Km32.xbm" to type Pixmap
Warning: Type conversion failed
相关代码如下所示:
#define RES_CONVERT( res_name, res_value) \
XtVaTypedArg, (res_name), XmRString, (res_value), strlen(res_value) + 1
XtVaSetValues(MwRscRange30LBL,
RES_CONVERT( XmNlabelPixmap, "range30Km32.xbm" ),
NULL );
到目前为止我所做的没有成功的是:
- 比较了相关库的 SLES 12 SP3 和 SP4 之间的差异。
- 静态链接所有可能的库(一些库没有静态变体)。
- 检查 X11/Xt/Xm 的源代码。(Xm 和 Xt 的这部分交互,特别让我头疼。)
有任何想法吗?