簡體   English   中英

無法針對靜態庫進行編譯

[英]trouble compiling against static library

我用gccar創建了一個靜態庫libstuff.a 我已經將庫安裝在/custom/lib/dir/ ,並將頭文件安裝在/custom/include/dir/ 當我嘗試針對存檔編譯另一個應用程序時,遇到了問題。

我嘗試編譯的應用程序基本上使用gcc -L/custom/lib/dir/ -I/custom/include/dir/ -lstuff

當我嘗試編譯,我得到錯誤約我在一個函數聲明stuff.h和定義stuff.c

main.c:51: undefined reference to `stuff_init'
collect2: error: ld returned 1 exit status

如果我從/custom/lib/dir/刪除libstuff.a ,則編譯器會抱怨/usr/bin/ld: cannot find -lstuff 如果我放回去,它不會抱怨。 因此,它可以正確找到存檔。

如果我從main.c刪除代碼行#include "stuff.h" ,則gcc抱怨stuff_init未定義,因此它可以正確找到標頭。

如果我運行nm libstuff.a ,則輸出包括0000000000000000 T stuff_init 因此,該功能在存檔文件中定義。

那我在做什么錯?

您沒有顯示確切的鏈接行,但是有可能您應該(但不要)在目標文件之后列出庫:

gcc -o program main.o -L/custom/lib/dir -lstuff

如果庫之外有多個對象文件,則在所有庫之前列出所有對象文件。 -L選項可以在使用給定目錄中的庫的-llib選項之前的任何位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM