【问题标题】:command to compile c files with .a files用 .a 文件编译 c 文件的命令
【发布时间】:2012-05-04 18:30:55
【问题描述】:

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

【问题讨论】:

    标签: c linux gcc x86-64


    【解决方案1】:

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

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

    非平凡项目的 Makefiles 通常首先调用 gcc 将每个 .c 文件编译为 .o 对象。

    gcc -c something.c
    

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

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

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

    【讨论】:

    • 感谢anonymous在目标文件生成中发现错误
    【解决方案2】:

    *.a 是静态库而非动态库(Windows 中为*.dll,Linux 中为*.so

    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 选项很重要。

    【讨论】:

    • 已将 gcc -L&lt;here comes the library path&gt; -l&lt;library name&gt;gcc -l &lt;here comes the library path&gt; -l&lt;library name&gt; 更改为。希望这就是你的意思
    • 如果库是libname.a,为什么要使用-lname
    • @this 在 gcc 中,-lfoo 表示 libfoo.alibfoo.so。至于gcc为什么要这么做,我也不知道。
    【解决方案3】:

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

    【讨论】:

    • 不回答关于如何的问题。没有说“它会是什么样子”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2018-08-09
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多