例如,我正在尝试使用 GLFW3,它会向我抛出以下错误
x11_init.c:-1: 错误:未定义对“XIQueryVersion”的引用。
我只知道它与 X11 有关,但我怎么知道我必须链接哪个库?你将如何解决这个问题?
例如,我正在尝试使用 GLFW3,它会向我抛出以下错误
x11_init.c:-1: 错误:未定义对“XIQueryVersion”的引用。
我只知道它与 X11 有关,但我怎么知道我必须链接哪个库?你将如何解决这个问题?
您可以使用nm
列出系统库中定义的符号,以查找哪个包含您缺少的符号:
find /usr/lib/ -type f -name \*.a \
-exec nm -gAC --defined-only {} 2> /dev/null \; \
| grep \ XIQueryVersion
哪个输出:
/usr/lib/x86_64-linux-gnu/libXi.a:XIQueryVersion.o:00000110 T XIQueryVersion
然后你知道你必须链接libXi.a
,当然你可以调整库路径和符号名称,这只有在你的系统中已经有正确的库时才有效。
我将按以下顺序进行:
nm
以查看哪个包含此引用(嘘……这是libxi
)
我遇到了类似的链接错误。我的错误是:
/usr/local/lib/libglfw3.a(x11_init.c.o): In function `initExtensions':
x11_init.c:(.text+0x16d3): undefined reference to `XIQueryVersion'
/usr/local/lib/libglfw3.a(x11_window.c.o): In function `createWindow':
x11_window.c:(.text+0x6de): undefined reference to `XISelectEvents'
但是因为我想要Cmake为所需的链接库链接标志,所以我花了一段时间才这样做。编译基于 glfw 的程序所需的外部库是:
Requires.private: x11 xrandr xi xxf86vm gl
该线程显示了如何找到编译基于 glfw 的程序所需的这些库。
因为,我花了 2-3 个小时为上述附加链接库寻找 Cmake 链接标志。我认为这里值得一提的是帮助别人。
主要是因为我上面提到的错误,我只需要一个 cmake 链接标志xi
,但为了完整起见,我为所有这些都提到了,即x11 xrandr xi xxf86vm
. 这是我CMakeLists.txt
文件中的片段:
include_directories(
./src
${X11_xf86vmode_INCLUDE_PATH}
${X11_Xrandr_INCLUDE_PATH}
${X11_Xinput_INCLUDE_PATH}
)
target_link_libraries(
${GLFW_LIBRARIES}
${X11_LIBRARIES}
${X11_Xxf86vm_LIB}
${X11_Xrandr_LIB}
${X11_Xinput_LIB}
)
我从这个链接中提取了这些标志。希望,它会为其他人节省时间。享受!
我在尝试构建 OpenGL 教程代码时遇到了这个错误。libxi-dev
我通过卸载软件包来修复它。
我首先清理构建目录
cd build/
rm -r ./*
然后删除 libxi-dev 包
sudo apt-get remove libxi-dev
sudo apt-get autoremove
并通过以下方式重建项目
cd build/
cmake .. # My ogl directory
make all
然后成功。(实际上我不知道根本原因是什么,但它对我有用。)