比如我想使用GLFW3,它在我拋出以下錯誤如何鏈接一個未知的庫
x11_init.c:-1: error: undefined reference to `XIQueryVersion'.
我只知道它有事情做與X11,但我怎麼知道哪個庫我必須鏈接?你將如何解決這個問題?
比如我想使用GLFW3,它在我拋出以下錯誤如何鏈接一個未知的庫
x11_init.c:-1: error: undefined reference to `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
This線程將展示如何找到這些庫編譯基於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}
)
我提取這些標誌從這個link。 希望,這將節省時間等。請享用!
我會在Google中輸入'XIQueryVersion'。 –
論壇,文檔,Google,Wiki;) – gaussblurinc