我正在将一个模块从 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
我不知道为什么比较失败。任何指向可能的解决方案的指针都会非常有帮助
编译并运行以下示例来练习库调用。
这是示例代码:
#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