Visual Studio 2015链接错误LNK2005
问题描述:
我需要将静态库链接到给定的对象文件。我没有该文件的源代码,也没有任何影响。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”
答
在Visual Studio 2015年编译器不与早期版本的编译器创建的对象文件兼容。 C运行时库有一个重大的重组,破坏了Visual Studio以前的C对象级向后兼容性。您需要使用较旧的编译器来编译和创建静态库,然后将其与旧版编译器创建的对象文件进行链接。您可以在Visual Studio 2015中通过安装Visual Studio 2010并在您的Visual Studio 2015项目属性中选择“配置属性 - >常规 - >平台工具集”下的“Visual Studio 2010(v100)”来执行此操作。