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
是不是/“拱门”;visualc++;是否影响我链接的现有*静态*库? VisualC++的“/ ARCH”转换是否影响静态库?< /P>_C++_Visual Studio_Visual C++_Visual Studio 2013 - Fatal编程技术网

是不是/“拱门”;visualc++;是否影响我链接的现有*静态*库? VisualC++的“/ ARCH”转换是否影响静态库?< /P>

是不是/“拱门”;visualc++;是否影响我链接的现有*静态*库? VisualC++的“/ ARCH”转换是否影响静态库?< /P>,c++,visual-studio,visual-c++,visual-studio-2013,C++,Visual Studio,Visual C++,Visual Studio 2013,一方面,.lib文件“经典地”应该包含完成的目标代码,这些代码将被链接到EXE或DLL文件中。所以“/arch”开关显然不应该对我链接的现有.lib文件产生影响。我必须在它自己的项目/解决方案中重新编译.lib文件,并在那里更改“/arch”开关 但另一方面,现在有链接时代码生成和全局优化之类的东西,这意味着.lib实际上现在只包含某种“中间”代码。而实际的代码生成延迟到链接器。这意味着“/arch”开关可能会再次影响我链接的现有.lib文件。是这样还是不这样 我可以不找到关于这个问题的明确答案

一方面,.lib文件“经典地”应该包含完成的目标代码,这些代码将被链接到EXE或DLL文件中。所以“/arch”开关显然不应该对我链接的现有.lib文件产生影响。我必须在它自己的项目/解决方案中重新编译.lib文件,并在那里更改“/arch”开关

但另一方面,现在有链接时代码生成和全局优化之类的东西,这意味着.lib实际上现在只包含某种“中间”代码。而实际的代码生成延迟到链接器。这意味着“/arch”开关可能会再次影响我链接的现有.lib文件。是这样还是不这样

我可以找到关于这个问题的明确答案。这里有人知道具体情况吗

问候,,
MuldeR

不确定,但我想说的是,编译器提供的正常.lib文件,或作为第三方代码的一部分,不太可能是“编译为特定进程的二进制机器代码并可随时使用”-arch只影响编译到项目中的源代码。我发现一个源代码这样说:Visual C++ .NET引入链接时间代码生成。[…]编译器前端不调用后端。相反,它会发出一个包含IL的OBJ文件。[…]当使用基于IL的OBJ文件调用链接器时,它会调用后端(C2.DLL)中的COM方法来生成最终的、特定于处理器的代码。”毕竟,还有一个静态库(.lib)只是将OBJ文件的集合打包到存档中以供重复使用。那么,当.lib转换为最终机器代码时,代码生成器设置从何处获取?对,因此对象文件可以是直接机器代码或中间表示(IL)。这里的要点是,在构建代码时,有一种选择,我相信,例如,运行时库直接构建为机器代码。只需使用库提取工具提取库中的一个或几个目标文件,然后运行一些解码工具(dumpbin或类似工具),就很容易找到查看文件实际包含的内容。由于我在所有三台家用计算机上都只有Linux,所以我无法做到这一点。这比你想象的要复杂得多。静态库只是一包.obj文件,可以将其视为一个没有压缩的.zip存档。编译选项嵌入在.obj文件中,你可以看到它们带有十六进制查看器:)在追踪由错误的编译器选项导致的链接问题时,实际上非常方便。因此,这里没有什么复杂的事情,链接器可以轻松地运行编译器的后端。那么,Hans,你知道运行库中有什么吗?包含x86机码的对象文件,或者稍后从编译器bac变成x86的IL代码肯德?