10

我有几个 .c 文件和一个 .a 目标文件。我应该使用 gcc 的什么命令将它们编译为一个 exe 文件?如果我们使用makefile,它会是什么样子?

4

3 回答 3

21

对于简单的情况,您可能可以这样做:

gcc -o maybe.exe useful.a something.c

重要项目的 Makefile 通常首先调用 gcc 将每个 .c 文件编译为 .o 对象。

gcc -c something.c

然后他们使用 .o 和 .a 文件列表调用链接器(这些天经常使用 gcc 作为它的包装器)以链接到输出可执行文件。

gcc -o maybe.exe useful.a something.o

另请注意,对于大多数已安装的库,通常不会显式指定 .a 文件,而是说 -lhandy 是“尝试在配置的(或使用 -L 指定的)搜索目录中查找名为 libhandy.a 的东西的缩写"

于 2012-05-04T18:41:05.710 回答
7

*.a是一个静态库而不是动态的(*.dll在 windows 和*.solinux 中)

gcc -L<here comes the library path> -l<library name>

例如对于您在当前路径中有 libname.a 的文件,您应该使用:

gcc *.c -L. -lname -o myprogram.o

来自man(将 man gcc 放在 shell 命令提示符中)

您可以混合使用选项和其他参数。在大多数情况下,您使用的顺序无关紧要。当您使用多个相同类型的选项时,顺序确实很重要。例如,如果您多次指定 -L,则会按指定的顺序搜索目录。此外,-l 选项的位置也很重要。

于 2012-05-04T18:44:12.133 回答
4

.a 文件是一个库,已经编译。您将 .c 文件编译为 .o,然后使用链接器将 .o 与 .a 链接以生成可执行文件。

于 2012-05-04T18:34:59.193 回答