在Linux下,与#pragma comment(lib, "xxx.lib")相当的命令是什么?

67

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

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


1
顺便提一下,这个功能已经有人提出了请求:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39437 - drescherjm
3个回答

31

GCC手册中关于编译指示的页面中似乎没有提到任何等效的编译指示。

我看到GCC不支持在源代码中进行链接的一个原因是,有时候正确的链接取决于链接顺序;这将要求您确保链接顺序无论编译顺序如何都能正确进行。如果您要做这么多工作,您可能还不如直接在命令行(或其他方式)上传递链接器参数。


3
同样适用于一些,如果不是所有的Windows编译器。但是,是的,这样的编译指示符是 __糟糕的__。 - Mads Elvheim
7
不,正如链接的文章所述,正确的链接取决于链接顺序。 - Windows programmer
根据顺序进行链接有时是一件好事,但它不应该阻止指定实际不依赖于任何特定链接顺序的内容(除了系统库的顺序总是晚些)。特别是出于这个原因排除只有一个外部库的情况就很愚蠢。对于C/C++人来说通常是不可行的,就像说:“嘿,我们不喜欢未定义/未指定的行为,所以让我们把它们都定义清楚!” - FrankHB

21

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

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


2
你不完全正确,有一些情况下比如使用ROOT(root.cern.ch),这会非常有帮助。 - RSFalcon7
OP 明显已经弄清了,GCC 链接器不理解那个 pragma。这并没有回答问题。 - rustyx

0

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

-Werror=unknown-pragmas


6
这个回答没有回答这个问题。 - user202729
2
...而且,GCC 9.2或clang 8仍然无法理解这个编译指示(例如,warning: ignoring #pragma comment [-Wunknown-pragmas]\n\\ #pragma comment(lib,"xxx.lib"))。 - alfC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接