Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当I';我用VS2013编译?_C++_Visual Studio_Visual Studio 2010_Visual C++_Visual Studio 2013 - Fatal编程技术网

C++ 当I';我用VS2013编译?

C++ 当I';我用VS2013编译?,c++,visual-studio,visual-studio-2010,visual-c++,visual-studio-2013,C++,Visual Studio,Visual Studio 2010,Visual C++,Visual Studio 2013,我有一个第三方库,它是一个静态的.lib文件,他们告诉我是用VS2010编译的。我们在VS2013中开发应用程序,需要链接到此库 当我们尝试时,会出现以下错误: 错误C1047:对象或库文件“…/xxx.lib”是使用创建的 比其他对象更旧的编译器;重建旧对象和 图书馆 这是否意味着我们必须使用VS2010编译器链接到它?(我们无法获得该库的重新编译版本)或多或少;对 一般来说,C++程序的所有部分都需要编译和链接到完全相同的编译器(包括精确编译器版本)。 通常,在构建不同的部件时,还需要使用相

我有一个第三方库,它是一个静态的.lib文件,他们告诉我是用VS2010编译的。我们在VS2013中开发应用程序,需要链接到此库

当我们尝试时,会出现以下错误:

错误C1047:对象或库文件“…/xxx.lib”是使用创建的 比其他对象更旧的编译器;重建旧对象和 图书馆

这是否意味着我们必须使用VS2010编译器链接到它?(我们无法获得该库的重新编译版本)

或多或少;对

一般来说,C++程序的所有部分都需要编译和链接到完全相同的编译器(包括精确编译器版本)。 通常,在构建不同的部件时,还需要使用相同的编译器选项

也有例外,但这是一般的经验法则

< >不存在标准化的C++ ABI。

一般来说,C++程序的所有部分都需要编译和链接到完全相同的编译器(包括精确编译器版本)。 通常,在构建不同的部件时,还需要使用相同的编译器选项

也有例外,但这是一般的经验法则


不存在标准化的C++ ABI。< /P>,不仅是同一个编译器,而且同样的选项在一定程度上是(特别是运行库和<>代码>迭代器Debug GoeS/<代码>应该匹配)。例如,如果在同一个可执行文件中链接调试和非调试对象/ LIBs,通常只会产生疼痛。@ JesperJuhl,您是什么意思?“没有标准化的C++ ABI”是指API吗?不,我指ABI——就像“应用程序二进制接口”一样。C++没有标准化的一个。这意味着你不能依赖由不同编译器(甚至不同的小版本)编译的对象是二进制兼容的(可链接的,可调用的)。。这意味着您必须对最终结果的所有组件(二进制或库)使用相同的编译器/链接器/选项才能获得正确的结果-您不能混合和匹配。这里的一个选项是使用VS 2010工具集创建一个DLL,将您对该静态库的使用封装在一个C-可调用函数中,然后您的主应用程序可以使用该DLL而不是静态库,因为DLL确实具有定义良好的ABI。不仅相同的编译器,而且在一定程度上也具有相同的选项(特别是,运行库和<代码>迭代器Debug GoeS/<代码>应该匹配)。例如,如果在同一个可执行文件中链接调试和非调试对象/ LIBs,通常只会产生疼痛。@ JesperJuhl,“你没有什么标准化的C++ ABI”是什么意思?不,我是指ABI——就像“应用程序二进制接口”一样。C++没有标准化的含义,意思是你不能依赖不同编译器(甚至不同的小版本)编译的对象是二进制兼容的(可链接的,可调用的)。这意味着对于正确的结果,你必须使用相同的编译器/链接器/选项来完成最终结果的所有组件。(二进制或库)-您不能混合和匹配。这里的一个选项是使用VS 2010工具集创建一个DLL,将您对该静态库的使用封装在一个C-可调用函数中,然后您的主应用程序可以使用该DLL而不是静态库,因为DLL确实具有定义良好的ABI。请注意,切换到for VS 2015后,旧的静态库可能无法使用甚至可以链接到VS 2015。如果无法重建,您应该制定计划在某个时候替换该黑盒库。请注意,切换到for VS 2015后,该旧静态库可能根本无法链接到VS 2015。如果无法重建,您应该制定计划在某个时候替换该黑盒库。