[英]Why does it always say “undefined reference”?
(我在Windows上。)
我正在使用C程序測試我編譯的DLL( libsox ),它看起來像這樣:
#include <stdio.h>
#include "sox.h"
int main(void) {
char const * versionText = sox_version();
printf(versionText);
return 0;
}
DLL中定義的函數在sox.h
有以下原型(其中包含cdecl
):
LSX_RETURN_VALID_Z LSX_RETURN_PURE
char const *
LSX_API
sox_version(void);
這是問題所在:當我嘗試使用gcc -lsox -o test.exe test.c
構建文件時出現以下錯誤:
C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ccSS2h2z.o:test.c:(.text+0xf): undefined reference to `sox_version'
collect2: ld returned 1 exit status
一句話給-lsox
:我在MinGW的lib
文件夾中有庫文件“libsox.dll.a”。 如果我寫-lsoxnonsense
,那么它說沒有庫。 這意味着在所示的情況下它找到了庫。 那么為什么不想創建鏈接呢?
gcc -lsox -o test.exe test.c
您必須先放置源文件:
gcc test.c -lsox -o test.exe
這是因為鏈接器按順序遍歷輸入文件,查找未定義的引用並滿足之前看到的引用。 所以在你的命令行中,它讀取libsox.a
(或類似的東西),找到未定義的引用(沒有)。 然后,它轉到你的test.c
,在那里找到未定義的引用,但沒有更多的庫來滿足它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.