今天在编译项目的过程中,发现一个库文件的路径明明写错了,但还是能够正确链接成功……
一番调研后发现,原来这个库在前面已经被放在链接列表里面了,而且前面的路径是正确的。这说明,虽然我们通常在链接静态库的时候,我们都会像下面这样写:
gcc -L<路径-1> 库-1 -L<路径-2> 库-2 ...
但实际上,这样写只是为了更方便理解,其实链接的路径和库文件并没有一一对应关系。也就是说,上面的写法完全可以是这样的:
gcc -L<路径-1> -L<路径-2> 库-1 库-2 ...
通过以下代码进一步验证上面的结论是正确的,有兴趣的小伙伴可以自己试试看~~
PS:看了一下GCC的官方文档,其实对于这种情况已有清楚说明如下:
-L
dir Add directory dir to the list of directories to be searched for -l.
gcc main.o -L./libA -L./libB -ltestA -ltestB -o main
//main.c
#include "libA/testA.h"
#include "libB/testB.h"
int main() {
testA();
testB();
return 0;
}
//libA/testA.h
void testA();
//libA/testA.c
#include "testA.h"
#include <stdio.h>
void testA() {
printf("this is testA.\n");
}
//libB/testB.h
void testB();
//libB/testB.c
#include "testB.h"
#include <stdio.h>
void testB() {
printf("this is testB.\n");
}