下面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
中查找。