[英]trouble compiling against static library
我用gcc
和ar
創建了一個靜態庫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.