【发布时间】: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 发行版中,您可以在生成的二进制文件上使用
ldd、readelf -d或file来告诉您它是动态链接还是静态链接.
标签: c makefile shared-libraries