"DSO missing from command line" 在 libX11 中

"DSO missing from command line" in libX11

编译此文件时

g++ -m64 -Wl,-O1 -o qjoypad 
    axis.o axis_edit.o axisw.o button.o button_edit.o buttonw.o event.o flash.o icon.o joypad.o joypadw.o joyslider.o keycode.o layout.o layout_edit.o main.o quickset.o getkey.o moc_axis.o moc_axis_edit.o moc_button.o moc_button_edit.o moc_flash.o moc_icon.o moc_joypad.o moc_joypadw.o moc_keycode.o moc_layout.o moc_getkey.o moc_layout_edit.o    
    -L/usr/lib/x86_64-linux-gnu -lXtst -lQtGui -lQtCore -lpthread -lXtst

我收到以下错误:

/usr/bin/ld: keycode.o: undefined reference to symbol 'XKeycodeToKeysym'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line

然而,符号只是一个全局变量:

$ readelf -s /usr/lib/x86_64-linux-gnu/libX11.so.6 | grep XKeycode
     259: 000000000008a000   646 FUNC    GLOBAL DEFAULT   11 XKeycodeToKeysym
    1308: 0000000000029830    73 FUNC    GLOBAL DEFAULT   11 _XKeycodeToKeysym

我找到了这个 question, but the user was just linking in the wrong place, or this question,它与 pkgconfig 有关。据我所知,我的构建命令应该是正确的。

发现问题。由于某些原因,我必须特别包含 -lX11.configure 命令没有这样做。

g++ -m64 -Wl,-O1 -o qjoypad 
    axis.o axis_edit.o axisw.o button.o button_edit.o buttonw.o event.o flash.o icon.o joypad.o joypadw.o joyslider.o keycode.o layout.o layout_edit.o main.o quickset.o getkey.o moc_axis.o moc_axis_edit.o moc_button.o moc_button_edit.o moc_flash.o moc_icon.o moc_joypad.o moc_joypadw.o moc_keycode.o moc_layout.o moc_getkey.o moc_layout_edit.o    
    -L/usr/lib/x86_64-linux-gnu -lXtst -lQtGui -lQtCore -lpthread -lX11

在 Makefile 中查找

LIBS = -lfoo -lbar ...

并将其添加到那里。