在 RHEL 中调用 XtIsSubclass(w, xmComboBoxWidgetClass) 失败

问题描述 投票:0回答:1

我正在将一个模块从 Solaris 迁移到 RHEL 7.9,该模块使用 X 主题来构建 UI。

迁移后,调用 - XtIsSubclass(w, xmComboBoxWidgetClass) 失败

其中 w 是组合框小部件。

可以通过 /usr/include/Xm/ComboBox.h 中的宏进行调用

#define XmIsComboBox(w) XtIsSubclass(w, xmComboBoxWidgetClass)

xmComboBoxWidgetClass 在宏上方的同一文件中声明。

我能够在 /usr/lib/libXm.so.4.0.4 中看到字符串“xmComboBoxWidgetClass”

/usr/lib> 字符串 libXm.so.4.0.4 | grep -w“xmComboBoxWidgetClass” xmComboBoxWidgetClass

我不知道为什么比较失败。任何指向可能的解决方案的指针都会非常有帮助

c++ c x11 motif
1个回答
0
投票

编译并运行以下示例来练习库调用。

这是示例代码:

#include <Xm/Text.h>
#include <Xm/ScrolledW.h>
#include <Xm/ComboBox.h>

int main(int argc, char** argv)
{
    XtAppContext app;
    Widget topShell;
    Widget combo;

    topShell = XtVaAppInitialize(&app, "App", NULL, 0, &argc, argv, NULL
, NULL);

    combo    = XtVaCreateManagedWidget("combo", xmComboBoxWidgetClass, topShell,
                                           NULL);
    printf("Checking\n");
    if( XmIsComboBox(combo) )
    printf("Yes it is\n");
    XtRealizeWidget(topShell);
    XtAppMainLoop(app);

    return 0;
}

这是 makefile

CC = cc
CFLAGS = -Wall -Wextra -I/usr/local/include
LIBS = -lXm -lXt -lX11
LDFLAGS = -L/usr/local/lib

SRCS = main.c
OBJS = $(SRCS:.c=.o)
TARGET = test

all: $(TARGET)

$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) $(LDFLAGS) -o $(TARGET) $(OBJS) $(LIBS)

%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARGET)

运行上述...

$ ./test
Checking
Yes it is
© www.soinside.com 2019 - 2024. All rights reserved.