c - 如何在 gcc make 中链接静态库?

标签 c gcc makefile ld

静态库可以在命令行中正常链接,但不能通过 makefile 链接。编译部分访问包含文件似乎没问题,但 makefile 中的 ld 过程一定是错误的。 提前感谢您的帮助!

这是我的命令行:

gcc -o quadEq.exe quadEq.c -I../include -L../lib -lnowic

这是我的 Makefile:

CFLAGS = -Wall -g -c
INCLUDE = -I../include
LDFLAGS = -L../lib
LDLIBS = -lnowic
SOURCES = quadEq.c
OBJECTS = $(SOURCES:.c=.o)

EXE = quadEq

all: $(SOURCES) $(EXE)

$(EXE): $(OBJECTS)
    gcc $(OBJECTS) $(LDFLAGS) $(LDLIBS) -o $@ 

.c.o:
    gcc $(CFLAGS) $(INCLUDE) $< -o $@ 

这是我运行 Makefile 和命令行的屏幕截图。

enter image description here

最佳答案

静态库关心链接它们的顺序。如果libA.a依赖于libB.a,那么你必须执行-lB -lA

如果libA.a符号依赖于libB.a,而libB.a又依赖于libA.a符号,则必须循环链接: -lB -lA -lB。我见过一些循环达到大约 3 或 4 个循环,但根据我的经验,通常 2 个就足够了。

这与动态库链接不同,动态库链接不仅不关心链接它们的顺序,而且不需要链接依赖库,因为 .so 指定了它们。

关于c - 如何在 gcc make 中链接静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993856/

相关文章:

c - 动态内存分配的字符指针分析

c - 内存地址和内存地址中的值

c - C 初学者 : Getting frustrated on a simple program

linux - Makefile - 每次编译所有文件

c++ - Makefile 覆盖默认隐式规则

c - 如何根据configure文件/makefile文件删除死代码或无用代码

c - '=|' 运算符的作用是什么?

c - 进程的退出状态如何取决于它是否是静态构建的?

linux - 在 64 位 Linux 机器上的 gcc 中制作 'long' 4 字节

c++ - 使用纯属性注释 const 成员函数