【问题标题】:How to link my C program to a static/dynamic library?如何将我的 C 程序链接到静态/动态库?
【发布时间】:2016-02-16 19:35:13
【问题描述】:

我正在尝试将我的 C 程序链接到静态库和动态库以查看差异。我怎么做? 我已经制作了自己的 Makefile:

# ------ executable rule  -----------
app : app.o
        -gcc -g  app.o -o app

# ------ intermeditate object files rule (.o) -------
app.o : main.c
         -gcc -g -c main.c -o app.o

我只向您展示了我的一些 Makefile,因为我认为其余部分是不必要的。
我尝试在-gcc -g app.o -o app 之后写-L. lstatic,但没有成功。

【问题讨论】:

  • 要么使用-static,要么像使用“.o”文件一样明确传入要链接的文件。 Also, read the manual
  • 如果我想将它链接到动态库,那么我必须写-gcc -g app.o -o app -rdynamic ?
  • 没有。动态链接是默认设置。所以省略-static 就可以了。在没有-static 的情况下链接时,链接器(至少是gnu)将首先查找动态库,如果没有找到,它将查找静态库。
  • 至于“看到差异”:在大多数 Linux 发行版中,您可以在生成的二进制文件上使用 lddreadelf -dfile 来告诉您它是动态链接还是静态链接.

标签: c makefile shared-libraries


【解决方案1】:

了解invoking GCCgcc 的参数顺序很重要!

您可以使用-static-Bstatic

您还可以显式链接到静态库,方法是在链接时提供一些/usr/lib/libfoo.a(或一些适当的文件路径)参数。

您最好改进您的Makefile 以使用现有的内置规则(尝试make -p)和常规变量,例如喜欢here。阅读documentation of GNU make

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2012-02-15
    相关资源
    最近更新 更多