【问题标题】:Linker outfile property file does not match targetpath?链接器输出文件属性文件与目标路径不匹配?
【发布时间】:2011-06-09 15:53:41
【问题描述】:

我正在尝试为 SierraChart 自定义 study 编译 C++ 类型的 .DLL。 (这是一个金融交易应用程序。)这是我得到的警告,我需要修复它,所以它都指向链接器输出值:

warning MSB8012:

TargetPath(C:\SierraChart\VCProject\Release\SCStudies.dll) does not match the Linker's 
OutputFile property value (c:\sierrachart\data\SCStudies.dll).

This may cause your project to build incorrectly. To correct this, please
make sure that $(OutDir), $(TargetName) and $(TargetExt)
property values match the value specified in %(Link.OutputFile).

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets

知道有什么问题吗?

【问题讨论】:

  • 您是否尝试过按照警告中建议的步骤操作:“要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 % 中指定的值匹配(Link.OutputFile)。”
  • 说实话,我不知道该怎么做。对于将 Visual Studio 附加到进程和使用 C++,我是一种新手。

标签: c++ visual-studio-2010 msbuild linker-errors sierrachart


【解决方案1】:

我相信这个警告是在将 C++ 项目升级到 VS2010 时特别出现的。 Visual Studio 2010 C++ Project Upgrade Guide 描述了升级过程中遇到的一些警告。如果您不愿意更改项目设置,那么保留旧版本的 Visual Studio 可能对您有用。

要更改%(Link.OutputFile),请打开项目属性。导航到配置属性 -> 链接器 -> 常规。您可以将输出文件设置为$(OutDir)\SCStudies.dll,这应该可以解决您的问题。您可能需要为将要构建的每个配置/风格(Debug/x86、Release/x86、Debug/Itanium 等)重复更改。

【讨论】:

    【解决方案2】:

    基于此answer

    我更改了以下属性:

    链接器 -> 常规 -> 输出文件到 "$(OutDir)$(TargetName)$(TargetExt)"

    这阻止了警告的出现,并且成功生成了输出。

    【讨论】:

      【解决方案3】:

      原来的配置是这样设置的:

      属性 -> 链接器 -> 常规:$(OutDir)\"<'name fileA>".exe

      程序尝试运行“<'name_project>”.exe 并导致错误链接。

      您需要将配置设置为:

      属性 -> 链接器 -> 常规:$(OutDir)\"<'project name>".exe

      【讨论】:

        【解决方案4】:

        其他人没有提到的另一个修复是,默认情况下 TargetExt 是 .exe,而对于我的调试版本,我将其更改为 _d.exe,而您应该在 TargetName 路径中执行此操作。

        【讨论】:

          【解决方案5】:

          【讨论】:

            【解决方案6】:

            General->Output Directory中指定的目录和Linker->Output File中path中指定的目录必须匹配。

            如果您想更改默认值,请按以下顺序执行操作: 您首先在 General->Output Directory 中配置 OutDir。例如

            $(SolutionDir)$(Platform)\$(Configuration)\MyProgram\
            

            确保输出文件一致。例如。这会工作

            $(OutDir)\$(TargetName)$(TargetExt)
            

            【讨论】:

              【解决方案7】:

              Gerardo Hernandez 的评论帮助了我。

              General->Output Directory中指定的目录和Linker->Output File中path中指定的目录必须匹配。

              在我的例子中,我从 Visual Studio 6 导入了一个大型项目,并且

              C:\Project\myproject\OneOfMyDlls\.\Debug\OneOfMyDlls.dll

              不等于

              C:\Project\myproject\Debug\OneOfMyDlls.dll

              但是

              C:\Project\myproject\OneOfMyDlls\..\Debug\OneOfMyDlls.dll

              在路径缩减之后会是。

              问题在于 Visual Studio 2017 导入已将输出目录从 ..\Debug.\Debug 假设非常规的父目录使用是一个错误。在我们自己拥有 13 个 DLL 的大型项目中(更不用说第二方和第三方 DLL),将所有 DLL 收集在一个地方是有意义的,..\Debug 是正确的。

              因此,虽然其他人可能不得不更改 Linker->Output File,但在我的情况下,需要更改的是 General->Output Directory,因为它已被 Visual Studio 6 的导入损坏。

              ..\Debug 之类的东西在导入后变成了.\Debug 之类的东西。 (实际项目的具体名称已被删除。)

              【讨论】:

                【解决方案8】:

                如果你像我一样,在 20 年后回到 Visual Studio,你可能不知道项目属性在哪里。在 VS 2012 中:屏幕顶部“文件编辑查看项目构建...”:选择项目。属性是菜单中的最后一项。事实上,对我来说,目标名称也不匹配。

                【讨论】:

                  猜你喜欢
                  • 2011-05-19
                  • 2022-12-18
                  • 1970-01-01
                  • 2011-03-13
                  • 2020-02-03
                  • 1970-01-01
                  • 2012-08-16
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多