簡體   English   中英

在VC6中使用VS 2005庫時出現編譯錯誤

[英]Compilation error while using VS 2005 library in VC6

我有一個在VS 2005中編譯的庫,我試圖將其與舊的VC 6工作區之一鏈接,而鏈接時出現以下錯誤。

error LNK2001: unresolved external symbol _sprintf_s
error LNK2001: unresolved external symbol _strncpy_s
error LNK2001: unresolved external symbol _strcpy_s    
error LNK2001: unresolved external symbol _strcat_s    
error LNK2001: unresolved external symbol __time64    
unresolved external symbol __alloca_probe_16    
unresolved external symbol _main    
fatal error LNK1120: 7 unresolved externals    
Error executing link.exe.

請幫助我擺脫這個錯誤。

VC6庫中未定義_strcpy_s ,它是在VS2005(或VS2002 / 2003?)中添加的。 我認為沒有辦法解決。

AFAIK,通常不使用早期版本的編譯器和早期版本的庫。

我假設以上是您靜態鏈接可執行文件的結果?

_s函數是Microsoft添加到運行時庫中的“安全”函數,以使其更難編寫帶有緩沖區溢出的代碼。 它們是在VC6之后添加的(在VS.NET或VS2003中),而這些功能在VC6運行時庫中不存在,因此這就是鏈接失敗的原因。 解決此問題的唯一兩種方法是使用VS2005或VC6構建整套二進制文件。 后者可能不是一個好主意,因為它將要求您重新編寫庫以使用標准C函數。

通常,將編譯器版本混合在靜態庫和可執行文件中不是一個好主意,因為運行時庫確實會發生變化,並且您會遇到類似這樣的問題。

您可以將您的庫轉換為DLL,但這會打開另一罐蠕蟲……

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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