我正在嘗試檢查我的 libfyaml 安裝是否成功,因為我必須在專案中使用該庫。我從源代碼構建它并且安裝很順利,但是當我使用 編譯測驗程式時gcc test.c -o test,出現此錯誤:
/usr/bin/ld: /tmp/ccPsUk6E.o: in function `main':
test.c:(.text 0x14): undefined reference to `fy_library_version'
collect2: error: ld returned 1 exit status
我檢查了路徑,確實libfyaml.h位于/usr/local/include. 該路徑也很好,GCC 將其列為標題的路徑。我也嘗試過使用-I,-l和-L選項。但是,它仍然給出相同的錯誤。
我該如何解決這個問題?我在 Ubuntu 20 (WSL) 上。
測驗程式供參考:
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <libfyaml.h>
int main(int argc, char *argv[])
{
printf("%s\n", fy_library_version());
return EXIT_SUCCESS;
}
圖書館鏈接:Github
uj5u.com熱心網友回復:
GCC 有兩個主要組件:編譯器和聯結器。包含標題是您做對的部分,您基本上是在讓編譯器知道fy_library_version使用正確的引數和回傳型別呼叫它。
但是,編譯器不知道呼叫此類函式后會發生什么,并且檢查該函式的任何代碼是否存在的職責被推遲到了稍后的階段:聯結器。
聯結器確實是引發您看到的錯誤的原因
ld 回傳 1 個退出狀態
這是因為聯結器不知道您正在使用哪些庫,因此不知道在哪里可以找到函式的代碼。要解決這個問題,您應該告訴 gcc 您正在使用哪些庫:
gcc test.c -lfyaml -o test
uj5u.com熱心網友回復:
包含庫時,需要將-l引數傳遞給編譯器
不要參考我的話,但從名稱來看,庫名稱將是“fyaml”,因此命令如下
gcc test.c -o test.o -lfyaml
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455486.html
