為什么錯(cuò)誤LNK2019會(huì)出現(xiàn)在編譯中?
在進(jìn)行C 編譯過(guò)程中,有時(shí)候會(huì)出現(xiàn)error LNK2019錯(cuò)誤提示。這個(gè)問(wèn)題通常是由于程序的main函數(shù)入口和subsystem不匹配所引起的。本文將介紹如何解決這個(gè)問(wèn)題。SubSystem的定義
在進(jìn)行C 編譯過(guò)程中,有時(shí)候會(huì)出現(xiàn)error LNK2019錯(cuò)誤提示。這個(gè)問(wèn)題通常是由于程序的main函數(shù)入口和subsystem不匹配所引起的。本文將介紹如何解決這個(gè)問(wèn)題。
SubSystem的定義
在Visual Studio中,SubSystem指定了應(yīng)用程序的執(zhí)行環(huán)境。我們可以在項(xiàng)目屬性的Linker選項(xiàng)卡下看到SubSystem的設(shè)置。它有兩個(gè)選項(xiàng):Console (/SUBSYSTEM:CONSOLE)和Windows (/SUBSYSTEM:WINDOWS)。
如果應(yīng)用程序使用控制臺(tái)窗口進(jìn)行輸入輸出操作,那么要選擇Console;否則,選擇Windows。
不匹配的main函數(shù)入口
當(dāng)編寫(xiě)C 程序時(shí),main函數(shù)是程序的入口函數(shù)。但是,在不同的情況下,它的聲明可能會(huì)有所不同:
int main(){
// ...
}
或者
int main(int argc, char* argv[]){
// ...
}
如果你的程序使用第一種方式聲明main函數(shù),那么SubSystem應(yīng)該選擇Console;如果使用第二種方式,則應(yīng)該選擇Windows。
解決方法
為了解決error LNK2019錯(cuò)誤,我們需要正確地匹配main函數(shù)的聲明和SubSystem的設(shè)置。
如果程序的main函數(shù)是:
int main(){
// ...
}
那么,在項(xiàng)目屬性的Linker選項(xiàng)卡下,SubSystem應(yīng)該設(shè)置為Console (/SUBSYSTEM:CONSOLE)。
如果程序的main函數(shù)是:
int main(int argc, char* argv[]){
// ...
}
那么,在項(xiàng)目屬性的Linker選項(xiàng)卡下,SubSystem應(yīng)該設(shè)置為Windows (/SUBSYSTEM:WINDOWS)。
正確匹配之后,重新編譯程序,就不會(huì)再出現(xiàn)error LNK2019錯(cuò)誤了。
結(jié)論
在進(jìn)行C 編譯過(guò)程中,如果main函數(shù)的聲明和SubSystem的設(shè)置不匹配,就會(huì)出現(xiàn)error LNK2019錯(cuò)誤。要解決這個(gè)問(wèn)題,我們只需要根據(jù)程序的實(shí)際情況,正確地設(shè)置SubSystem即可。