(我在Windows上。)爲什麼總是說「未定義的參考」?
我測試了C程序我編一個DLL(libsox)看起來是這樣的:那就是在DLL中定義
#include <stdio.h>
#include "sox.h"
int main(void) {
char const * versionText = sox_version();
printf(versionText);
return 0;
}
功能在sox.h
的原型如下(這個東西包含cdecl
):
LSX_RETURN_VALID_Z LSX_RETURN_PURE
char const *
LSX_API
sox_version(void);
這裏的問題:當我嘗試建立文件與gcc -lsox -o test.exe test.c
我得到以下兒ROR:
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
,那麼它說沒有圖書館。這意味着在所示的情況下它找到了圖書館。那麼,爲什麼它不想創建一個鏈接。
您是否使用相同的編譯器構建了該庫?有時'_'會被前置符號名稱。 – 2012-04-18 00:00:24
是的,它是相同的編譯器。我認爲目標文件和.a文件都包含_sox_version。 – rynd 2012-04-18 00:15:34