c语言link

下面2个编译命令有何不同:

1.  gcc a.o -L./ -lmm -o run

2.  gcc -L./ -lmm a.o -o run

a.o 依赖于libmm.a, 也就是说a.o 调用了libmm.a中的函数,今天在编码时,发现用第2种方式,链接时会报错,提示符号A没有定义, 但是符号 A 确定在libmmm.a中有定义。 尝试第1种方式,编译成功。

当链接时存在依赖关系时,将 a.o 放在 -lmm 之前是正确的做法。

gcc a.o -L./ -lmm -o run

这个命令会先链接 a.o,然后在 a.o 中找不到的符号的情况下,再链接 libmm。这样确保在解析 a.o 中的符号时,已经知道去 libmm 中查找。

你可能感兴趣的:(Developer,Quality,build)