Visual c++ 试图理解多平台编译中编译器和链接器之间的交互 我有一个C++ VisualStudio项目,我正在为x86和x64架构编译。我在谷歌上搜索了很多信息,找到了很多如何做的方法,看起来很有效,但这让我对幕后发生的事情深感困惑

Visual c++ 试图理解多平台编译中编译器和链接器之间的交互 我有一个C++ VisualStudio项目,我正在为x86和x64架构编译。我在谷歌上搜索了很多信息,找到了很多如何做的方法,看起来很有效,但这让我对幕后发生的事情深感困惑,visual-c++,compilation,linker,platform,Visual C++,Compilation,Linker,Platform,显然,设置中唯一的区别是链接器命令行标志中的开关(确切地说,是/MACHINE标志) 然而,如果是这样的话,那么编译的目标文件必须是独立于平台的——这与我一直认为的完全相反,因为目标文件应该是机器代码序列,而机器代码序列又应该是依赖于平台的 所以,我的问题是:构建过程的哪一部分不像我想象的那样 谢谢你的时间和智慧 Michael在为32位x86编译时,Visual Studio使用编译器\Program Files\Microsoft Visual Studio 10.0\VC\bin\cl.e

显然,设置中唯一的区别是链接器命令行标志中的开关(确切地说,是/MACHINE标志)

然而,如果是这样的话,那么编译的目标文件必须是独立于平台的——这与我一直认为的完全相反,因为目标文件应该是机器代码序列,而机器代码序列又应该是依赖于平台的

所以,我的问题是:构建过程的哪一部分不像我想象的那样

谢谢你的时间和智慧


Michael

在为32位x86编译时,Visual Studio使用编译器\Program Files\Microsoft Visual Studio 10.0\VC\bin\cl.exe。为64位x86编译时,Visual Studio使用编译器\Program Files\Microsoft Visual Studio 10.0\VC\bin\amd64\cl.exe。第一个编译器生成32位对象文件,第二个编译器生成64位对象文件。这可以通过在对象文件上运行dumpbin.exe来查看其指定的体系结构


编译器调用保持不变(或多或少)——更改的是在构建之前设置的可执行$PATH。通过将路径指向32位或64位目录,它会偷偷地更改为构建项目而运行的整个程序集。通过查看项目属性>配置属性>VC++目录>可执行文件目录,并单击“编辑”,可以看到这一点。在“继承值”框中,您将看到当前配置和平台的路径。

添加了VisualC++标签,因为GCC确实生成依赖于架构的对象文件。谢谢,这似乎恢复了我的理智,而且,我发现了不同的目录设置。在我看来,来自Unix背景的人似乎很不直观,但我想我可以看到它背后的想法。