【问题标题】:How to stop creating .asm files when linking a library in the linked library (grpc) in MSBuild C++如何在 MSBuild C++ 中的链接库 (grpc) 中链接库时停止创建 .asm 文件
【发布时间】:2018-08-16 14:04:02
【问题描述】:

我们有一个静态库,可以导出一些 grpc.pb.cc、grpc.pb.h 文件以及一堆其他普通文件。我们称之为 LibMicroservicesClient。

然后我们有另一个库,它使用 msbuild 中的 ProjectReference 链接该库:

<ItemGroup>
 <ProjectReference Include="$(MSBuildThisFileDirectory)LibMicroservicesClient.vcxproj">
  <Project>{A397A6CB-641A-41FB-9E8C-2263EC3712E8}</Project>
  <Private>false</Private>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
  <CopyLocalSatelliteAssemblies>false</CopyLocalSatelliteAssemblies>
  <LinkLibraryDependencies>true</LinkLibraryDependencies>
  <UseLibraryDependencyInputs>false</UseLibraryDependencyInputs>      
 </ProjectReference>
</ItemGroup>

在导入此 LibMicroservicesClient 的最终库的链接处,在中间文件夹中开始生成一堆 .asm 文件。这些文件也在 LibMicroservicesClient 中间文件夹中生成,因此当两个库引用同一个 LibMicroservicesClient 时,它们开始在访问被拒绝时发生冲突,因为它们正在创建相同的 .asm 文件。

如何引用一个根本不会创建 asm 文件的静态库???我怎么能控制这个东西。

我们使用的是 Visual Studio 2015。我们使用 MSBuild 进行构建。

【问题讨论】:

  • 是否启用并行编译?

标签: c++ visual-studio-2015 msbuild static-linking


【解决方案1】:

啊,我明白了。启用了链接时间优化和整个程序优化。当 lto 被禁用但整个程序 opt 被启用时,程序自动启用 lto。副作用是 .asm 文件不是在库链接期间生成的,而是在库链接到最终可执行文件时生成的。因此禁用 lto 整个程序优化解决了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2020-08-21
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多