【问题标题】:#pragma comment(lib, "xxx.lib") equivalent under Linux?#pragma comment(lib, "xxx.lib") 在 Linux 下等效?
【发布时间】:2009-11-06 03:20:09
【问题描述】:

我有一个名为 libunp.a 的静态库文件,我知道我可以使用 gcc -lunp xx 链接到该库。

我可以使用#pragma comment(lib,"xxx.lib") 告诉Microsoft C/C++ 编译器包含该库;在 Linux/GCC 下怎么做?

【问题讨论】:

标签: gcc static-linking


【解决方案1】:

GCC manual's page on pragmas 中似乎没有提到任何等效的编译指示。

我看到 GCC 不支持源代码链接的一个原因是,有时,correct linking depends on link order;这将要求您确保无论编译顺序如何,链接顺序都正确发生。如果你要做那么多工作,我想你也可以在命令行(或其他方式)上传递链接器参数。

【讨论】:

  • 同样适用于某些(如果不是全部)Windows 编译器。但是,是的,这样的编译指示是不好的
  • "正确编译取决于链接顺序。" -- 不,正如链接文章所述,正确的链接取决于链接顺序。
  • 依赖于顺序有时对链接来说是件好事,但它不应该禁止指定一些实际上不依赖于任何特定链接顺序的东西(系统的顺序除外图书馆总是迟到)。特别是,出于这个原因排除只有一个外部库的情况是愚蠢的。对于 C/C++ 人来说,这通常是不合理的,就像说,“嘿,我们不喜欢未定义/未指定的行为,所以让我们把它们都定义好!”
【解决方案2】:

应在链接步骤中指定库。这样的信息简直 不属于翻译单元。可以对翻译单元进行预处理, 即使没有链接阶段也可以编译和组装。

仅仅因为#pragma comment(lib,"xxx.lib") 在源文件中并不意味着编译器会使用它。事实上,它作为注释进入,随后被链接器使用。与 *nix 没有太大区别。

【讨论】:

  • 您并不完全正确,在某些情况下,例如使用 ROOT (root.cern.ch),这可能会很有帮助。
  • OP 已经清楚地知道了这么多,GCC 链接器不理解那个编译指示。这绝不是回答问题。
【解决方案3】:

使用此 GCC 标志为未知编译指示生成错误。它会很快告诉你编译器是否理解它。

-Werror=unknown-pragmas

【讨论】:

  • 这个答案没有回答问题。
  • ...不,GCC 9.2 或 clang 8 仍然不理解这个 pragma(例如 warning: ignoring #pragma comment [-Wunknown-pragmas] \\ #pragma comment(lib,"xxx.lib")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多