0

我需要将静态库链接到给定的对象文件。我没有该文件的源代码,也没有任何影响。Visual Studio 2015链接错误LNK2005

使用Visual Studio 2010时,我可以创建一个库并将其与给定文件进行链接。

在不同的机器上我只有VS 2015年当我建立我的C代码链接到指定的lib我得到以下错误:

LIBCMT.lib(vfprintf.obj) : error LNK2005: __vfprintf_l already defined in c_fun.obj 
LIBCMT.lib(printf.obj) : error LNK2005: _printf already defined in c_fun.obj 

对于我用下面的简化代码的测试目的:

#include <stdio.h> 

void c_fun(double C_IN, double *C_OUT) 
{ 
    *C_OUT = C_IN * 2.0; 

    printf("Hallo C!\n"); 
} 

当我赞扬的printf行了,然后我就可以成功链接与VS2015创建的lib,但我需要为可视化目的printf语句。

编译我的lib我在命令行上使用相同的参数。是否有编译器或链接器选项来生成VS 2010兼容库?

当我使用DUMPBIN /所有两个库,我得到以下的输出:

库用VS2010创建:

2 public symbols 

     BC _F_FUN 
     310 _c_fun 

库用VS2015创建: 7公共符号

 1DE _F_FUN 
     432 [email protected][email protected]@[email protected] 
     432 ___local_stdio_printf_options 
     432 [email protected] 
     432 __vfprintf_l 
     432 _c_fun 
     432 _printf 

我期望在两个版本中都能得到相同的符号。

我使用的编译器选项两次“/ MT/W3/EHSC/C”

回答

2

在Visual Studio 2015年编译器不与早期版本的编译器创建的对象文件兼容。 C运行时库有一个重大的重组,破坏了Visual Studio以前的C对象级向后兼容性。您需要使用较旧的编译器来编译和创建静态库,然后将其与旧版编译器创建的对象文件进行链接。您可以在Visual Studio 2015中通​​过安装Visual Studio 2010并在您的Visual Studio 2015项目属性中选择“配置属性 - >常规 - >平台工具集”下的“Visual Studio 2010(v100)”来执行此操作。