2010-07-30 69 views
0

我有一个在VS 2005中编译的库,我试图链接它与旧的VC 6工作区之一,而链接我遇到以下错误。在VC6中使用VS 2005库时编译错误

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. 

请帮我摆脱这个错误。

回答

1

我假设以上是你静态链接可执行文件的结果?

_s函数是微软添加到运行时库中的“安全”函数,使得难以编写带有缓冲区溢出的代码。它们是在VC6之后(在VS.NET或VS2003中)添加的,并且这些函数不在VC6运行时库中,所以这就是链接失败的原因。解决这个问题的唯一方法是用VS2005或VC6构建整套二进制文件。后者可能不是一个好主意,因为它需要您重新编译库来使用标准C函数。

在运行时库确实发生变化时,将静态库和可执行文件中的编译器版本混合在一起通常不是一个好主意,因为运行时库会发生更改,并且会留下类似问题。

你可以把你的库变成一个DLL,但这是开放的另一罐蠕虫...

2

_strcpy_s未在VC6库中定义,它添加到VS2005(或可能是VS2002/2003?)。我认为没有办法绕过它。

AFAIK,通常不会使用早期版本的编译器和旧版本编译器的库。