【问题标题】:Is there an Ignore Standard Library Path in VS2008VS2008中是否有忽略标准库路径
【发布时间】:2015-09-07 23:46:56
【问题描述】:

我有一个 C++/MFC 应用程序,我正在尝试使其更便携,以便为跨平台转换为 wxWidgets 之类的东西做准备。

我的第一步是识别它的所有编译器和链接器依赖项,例如 CRT 库、Windows SDK 和 MFC,并将它们一起收集在与项目相同的文件存储中,以便整个包独立于可能因一台计算机而异的任何特定工作环境(WinSDK 版本等)。

对于编译器依赖项,这相对容易。通过使用 (/X) 选项

项目 > 属性 > C/C++ > 预处理器 > 忽略标准包含路径

我能够将项目从定义的默认包含文件夹中分离

工具 > 选项 > 项目和解决方案 > VC++ 目录

这当然会产生大量编译错误,并且通过将所有这些必需的库传输到我的文件存储并手动将它们的新路径添加到

项目 > 属性 > C/C++ > 常规 > 附加包含目录

我能够确保我拥有我自己的项目的编译器所依赖的所有内容的副本。

但是,对于链接器来说,这并不容易。虽然它确实有选项

项目>属性>链接器>常规>附加库目录

对于添加自定义依赖项,我找不到让链接器忽略标准库路径以帮助我识别这些依赖项的方法。

我只能找到

项目>属性>链接器>输入>忽略所有默认库

但这根本不是一回事。它只会导致链接器忽略标头中指定应链接到哪个库 files 的编译指示,但保留标准库路径供链接器搜索。

最后,我不得不回去

工具 > 选项 > 项目和解决方案 > VC++ 目录

并删除所有“库文件”目录,以确保我不会无意中忽略依赖项。这当然让 VS2008 现在无法构建其他项目,而我并没有尝试实现相同类型的依赖隔离。

编译器有这个有用的覆盖开关 (/X) 来禁用标准环境路径似乎很奇怪,但链接器没有。

有人能解释一下吗?还是我错过了什么?

【问题讨论】:

    标签: visual-studio visual-c++ visual-studio-2008 linker


    【解决方案1】:

    收集所有依赖项如何使您朝着类似于跨平台的方向发展?跨平台究竟是什么方式?如果您希望您的源代码 在非 VS 或非 Windows 平台上编译,(这是我个人对“跨平台”的默认解释)封送二进制依赖关系与它无关。

    如果您迁移到 wxWidgets,您仍然依赖于 wxWidgets 的版本 - 或任何其他框架 - 及其依赖项。编组二进制依赖项也比看起来要困难得多:可再发行二进制文件(CRT、MFC、OpenMP)是 VS2008 中的并行程序集,这实质上意味着多个版本在您的磁盘上共存 - 通常在 C:\Windows 下\winSxS 文件夹 - 并且您的应用程序通过其manifest 引导 Windows 加载程序确切依赖于哪个版本。从技术上讲,您可能能够跟踪它并选择您的特定版本,但这并不有趣。

    但是说真的,为什么要停在那里? Win32 dll - user32、kernel32 等 - 也是运行时依赖项,可能因环境而异,具体取决于安装的更新。我希望您不要尝试收集 那些 并放弃安装,我只是想指出编组依赖项不是可行的方法。


    编辑: 不影响跨平台,我个人可以说我将二进制依赖分为两类:

    1. 安装程序附带的东西 - 例如 WinSDK、DirectX、CUDA。

    2. 没有安装程序的东西 - 例如。自定义第 3 方组件。

    关于类别 (1):我维护了一个开发站安装列表,并将其应用于我需要构建的所有工作站。关于类别(2):我将这些项目推送到源代码管理,并使用构建后事件将它们放置在适当的 bin 目录中。 (不过,对于某些类型库,您可能需要预构建事件)。

    【讨论】:

    • 感谢您的回复。也许我没有明确我的目的,我在几个方面寻找项目可移植性。我正在为跨平台做准备,是的,我正计划转向 wxWidgets。我很高兴为 Windows 构建提交 VS2008,并且我了解将依赖于安装应用程序的 Windows 版本。但是我真的厌倦了尝试在不同的开发机器上处理这个项目并发现编译和链接错误,因为 WinSDK 或 DirectX 的本地副本丢失或不同。对我的问题有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2015-12-29
    相关资源
    最近更新 更多