簡體   English   中英

為什么總是說“未定義參考”?

[英]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.

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