代码之家  ›  专栏  ›  技术社区  ›  GJ.

在VC6中使用VS 2005库时发生编译错误

  •  0
  • GJ.  · 技术社区  · 15 年前

    我有一个用VS2005编译的库,我试图将它与一个旧的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.
    

    请帮助我摆脱这个错误。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Timo Geusch    15 年前

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

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

    通常情况下,在静态库和可执行文件中混合编译器版本并不是一个好主意,因为运行库会发生变化,这样的问题就会遗留下来。

    你可以把你的库变成一个动态链接库,但这会打开另一个蠕虫罐头…

        2
  •  2
  •   Max    15 年前

    斯特里皮亚 在VC6库中没有定义,它是在VS2005中添加的(或者可能是VS2002/2003?)我觉得没有办法解决。

    对于早期版本的编译器和早期版本的编译器,使用库是不常见的。