链接器outfile属性文件与targetpath不匹配?

时间:2011-01-15 14:25:42

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

我正在尝试为名为sierra chart的应用程序编译.DLL。

以下是我需要修复的警告,所有内容都指向链接器输出值:

  

警告MSB8012:   TARGETPATH(C:\ SierraChart \ VCProject \发布\ SCStudies.dll)   与链接器的OutputFile不匹配   适当的价值   (C:\ sierrachart \数据\ SCStudies.dll)。   这可能会导致您的项目构建   不正确。为了纠正这个问题,请   确保$(OutDir),   $(TargetName)和$(TargetExt)   属性值与值匹配   指定的   %(Link.OutputFile)。 C:\ Program Files   (86)\的MSBuild \ Microsoft.Cpp \ V4.0 \ Microsoft.CppBuild.targets

有什么想法吗?

7 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:6)

基于此answer

我更改了以下属性:

  

链接器 - >一般 - >输出文件到   “$(OUTDIR)$(的TargetName)$(TargetExt)”

这样可以防止出现警告并成功生成输出。

答案 2 :(得分:1)

原始配置设置如下:

  

属性 - &gt;链接器 - &gt;一般:$(OutDir)\"<'name fileA>".exe

程序尝试运行“<'name_project>”。exe并结果错误已链接。

您需要将配置设置为:

  

属性 - &gt;链接器 - &gt;一般:$(OutDir)\"<'project name>".exe

答案 3 :(得分:1)

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

答案 4 :(得分:0)

看起来这对该计划来说并不重要:

Odd Visual Studio error when following the custom study video

答案 5 :(得分:0)

General-&gt; Output Directory中指定的目录和Linker-&gt; Output File路径中指定的目录必须匹配。

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

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

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

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

答案 6 :(得分:0)

Gerardo Hernandez的评论帮助了我。

在General-&gt;输出目录中指定的目录和Linker-&gt;输出文件的路径中指定的目录必须匹配。

在我的情况下,我从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。 (已删除真正的项目特定名称。)