2009-11-06 37 views

回答

-4

简单;你不能。 GCC没有这样的等价物。指定-l作为gcc参数,创建链接描述文件,调用ld,调用911或其他。

这并不是说这样的编译指示更有意义。应在链接步骤中指定库。这些信息根本不属于翻译单位。即使没有链接阶段,翻译单元也可以进行预处理,编译和组装。由Visual Studio使用的工具链允许这样做,因为它是braindead,并且总是执行链接。

你可能想保存自己的一些繁琐的输入,并为您的项目生成文件:GNU Make Manual

+78

在最近的几十年里,程序员很喜欢设计.h文件和.lib文件,以便彼此之间有某种关系。在这种情况下,为.h文件包含一个编译指示,告诉链接器链接相应的.lib文件是合理的。当然gcc没有它,但这并不意味着它没有意义。 – 2009-11-06 03:42:11

+7

然后你认为库在链接过程中不需要任何额外的路径或标志。在Windows上这大部分都是如此,因此编译指示在Visual Studio环境中“工作”的原因。只要你使用相同的gcc版本,其他的gcc pragmas至少在不同的Linux/Solaris/BSD版本中是一致的。然而,道路并非如此。这就是为什么在配置脚本或makefile中分离构建阶段的原因。它在翻译单位里没有任何内容。尝试在某个时候移植软件;-) – 2009-11-06 04:06:58

+34

@Mads:事实上,Unix是一个需要分离构建和链接阶段以及与之相关的所有痛苦的分离平台,这并不是捣毁Windows的方式的理由,这是更容易处理,并允许图书馆执行者从用户身上带走这种痛苦。 Unix方法更难但更好的想法是纯粹的非理性的受虐狂。 – 2010-10-03 23:27:54

14

GCC manual's page on pragmas似乎没有提及任何等效的杂注。

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

+2

同样适用于某些(如果不是全部)Windows编译器。但是,是的,这样的编译指令是__bad__ – 2009-11-06 03:37:06

+6

“正确的编译取决于链接顺序。” - 不,如链接文章所述,正确的链接取决于链接顺序。 – 2009-11-06 03:39:43

18

图书馆应规定期间的链接步骤。这些信息只是 不属于翻译单位。翻译单元可以进行预处理,即使没有链接阶段,编译和组装也是如此。

仅仅因为#pragma comment(lib,"xxx.lib")在源文件中并不意味着编译器会消耗它。实际上,它作为评论发布,随后由链接器使用。与* nix相差无几。

+2

你不完全正确,有些情况下使用ROOT(root.cern.ch),这可能是非常有用的。 – RSFalcon7 2013-03-21 01:53:18

相关问题