GCC在链接时对依赖库的顺序是敏感的,被依赖的库必须放在后面。GCC链接规定,链接时,若A和B同时需要链接,不论A/B是目标文件还是库文件,若A中引用了B的符号,例如函数或者全局变量,则在链接时,必须将A写在B前面;因为,链接时从左向右搜索外部符号。


如一个libpq的测试程序:gcc -I/usr/include/postgresql -L/usr/lib -lpq -o test test.c
将报错: undefined reference to `PQconnectdb'
将报错: undefined reference to `PQconnectdb'
因为test.c引用的PQconnectdb,gcc在test.c右边没有搜索到符号,其实它在左边。正确的写法(test.c在-lpq左边):
gcc -I/usr/include/postgresql -L/usr/lib test.c -lpq -o test
gcc -o test testc. -I/usr/include/postgresql -L/usr/lib -lpq