命令列編譯鏈結,出現LNK2019錯誤,怎樣解決?

2021-03-31 17:38:49 字數 1534 閱讀 5169

返回首頁 - 當前索引 -

主  題:

命令列編譯鏈結,出現lnk2019錯誤,怎樣解決?

/out:test01.exe

test01.obj

test01.obj : error lnk2019: 無法解析的外部符號 __imp__messageboxa@16 ,該符號在

函式 _messageboxprintf 中被引用

test01.obj : error lnk2019: 無法解析的外部符號 __imp__getsystemmetrics@4 ,該符

號在函式 _winmain@16 中被引用

test01.exe : fatal error lnk1120: 2 個無法解析的外部命令

請問我如何確定連線的引數才能正確鏈結?????

無法解析的外部符號「symbol」,該符號在函式「function」中被引用

在 function 中找到了未定義的外部符號 (symbol)。若要解決此錯誤,請提供符號定義或移除引用它的**。

請看下面的示例:

extern int i;

extern void g();

void f()

int main()

如果在生成中包含的某個檔案中沒有定義 i 和 g,鏈結器將生成 lnk2019。可以新增這些定義,方法是將包含這些定義的源**檔案包括為編譯的一部分。或者可以將包含這些定義的 .obj 或 .lib 檔案傳遞給鏈結器。

對於從早期版本公升級到當前版本的 c++ 專案,如果定義了 __unicode 並且入口點為 winmain,需要將入口點函式的名稱更改為 _twinmain 或 _tmain。

導致 lnk2019 的常見問題有:

符號宣告包含拼寫錯誤,以致於符號宣告與符號定義不同。

使用了乙個函式,但其引數的型別或數量與函式定義不匹配。

函式宣告使用和函式定義使用中的呼叫約定(__cdecl、__stdcall 或__fastcall)不同。

符號定義在編譯為 c 程式的檔案中,而符號是在 c++ 檔案中不帶 extern "c" 修飾符宣告的。在此情況下,請修改宣告,例如不是使用:

extern int i;

extern void g();

而使用:

extern "c" int i;

extern "c" void g();

同樣,如果在將由 c 程式使用的 c++ 檔案中定義符號,請在定義中使用 extern "c"。

符號定義為靜態,但稍後在檔案外部被引用。

沒有定義靜態類成員。例如,應單獨定義下面類宣告中的成員變數 si:

#include struct x ;

// int x::si = 0; // un***ment this line to resolve

void main()

/verbose 鏈結器選項幫助您檢視鏈結器引用的檔案。dumpbin 實用工具的 /export 和 /symbols 選項還可以幫助您檢視 dll 和物件/庫檔案中定義的符號。

該問題已經結貼

如何用MinGW 命令列編譯鏈結c c

一直用vs,看現在eclipse很火,便想弄一下玩玩,用到了mingw,繼而用到了gcc,對gcc相當的不熟悉,從頭開始學一些簡單的吧。簡單的gcc用法 gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多而打擊了學習的信心。...

CentOS 命令列安裝matlab2018a

注意使用root許可權,以下命令均使用root許可權建立掛載目錄,並將映象掛載至目錄上。mkdir mnt rom mount o loop r2018a glnxa64 1.iso mnt rom解壓crackunzip matlabr2018alinux64crack.zip cp matlab...

命令列編譯Solution

c windows devenv.com microsoft r 開發環境 7.10.3077 版。c microsoft corp 1984 2001 保留所有權利。用法 devenv solutionfile projectfile anyfile.ext switches 可以呼叫 deven...