【问题标题】:VS2010 linking of static library behave differently in separate solutions静态库的 VS2010 链接在单独的解决方案中表现不同
【发布时间】:2014-11-19 11:37:52
【问题描述】:

假设我有一个解决方案S1,其中有两个项目pdeppmaster,分别创建一个静态和动态库。我有配置:

  • 发布 win32 : 产生pdep.lib
  • 调试 win32 : 产生pdepd.lib
  • 发布 x64 :产生pdepx64.lib
  • 调试 x64:产生pdepx64d.lib

pmaster 链接配置由Configuration Properties -> Linker -> Input -> Additional Dependencies 完成
代码中没有#pragma comment(lib)。没有共同的属性参考。

我观察到的:

  • 在带有 pdep 和 pmaster 的 s1 中,链接器的命令行很好。即/LIBPATH:"c:\pdep\lib\x64\Release" "pdepx64.lib"

  • 在通过单击项目 pmaster 新创建的解决方案 S2 中,我总是有一个附加行,其中包含指向特定 pdep 版本的绝对路径,无论配置如何。 即@ 987654331@

S2 中的链接器如何派生附加选项"c:\pdep\lib\pdepd.lib"
我如何摆脱它?

【问题讨论】:

  • @leppie 不要删除 vs2010 标签
  • 你不是在为 VS2010 开发东西。就像用 Vim 标记每个 Ruby 问题...
  • @leppie 可能和具体的IDE有关,为什么要去掉标签?
  • IMO,标签有效。请不要删除它。
  • @leppie,这是否意味着这里的所有C++ 人都在使用C++ 编译器?

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


【解决方案1】:

多种可能性:

  • 通用属性 -> 参考
  • Linker 或 Librarian 部分中的链接库依赖项。这假定已设置项目依赖项。
  • #pragma comment(lib...) 正在发挥作用

【讨论】:

  • 好的。为什么不在文本编辑器中打开 .SLN 或 .VCXProj 文件并进行查找?可能是埋在那里的东西,VS没有向你展示。一个这样的例子是/prefast 选项。
  • 阿杰确实是Link Library Dependencies。我附加了调试视图,在后一种情况下,MSBuild 正试图像一个大男孩一样自己解决问题。并且失败。你知道为什么吗?
【解决方案2】:

您可以使用带有预处理标志的 msbuild 展平项目文件。然后将其加载到纯文本或 xml 编辑器中。查看链接器命令并查看 $(properties) 包含哪些选项,然后查看设置的位置。

使用 msbuild,您还可以使用更详细的日志记录,它会报告评估了哪些条件等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2013-04-17
    • 2012-07-15
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多