我有一个在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.


请帮助我摆脱这个错误。

最佳答案

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

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

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

您可以将您的库转换为DLL,但这打开了另一罐蠕虫……

关于c++ - 在VC6中使用VS 2005库时出现编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3374360/

10-10 19:15