Static library cannot be found
让我先解释一下上下文。我有一个带有函数声明的标头,带有函数主体的.c程序以及主程序。
foo.h
1 2 3 4 5 6 | #ifndef _FOO_H_ #define _FOO_H_ void foo(); #endif |
foo.c
1 2 3 4 5 6 7 8 9 |
mainer.c
1 2 3 4 5 6 | #include <stdio.h> #include"include/foo.h" int main() { foo(); return 0; } |
就本程序而言,标头和静态库都需要位于单独的文件夹中,因此标头位于
在创建目标程序和静态库时都没有问题。
1 2 3 | $ gcc -c foo.c -o foo.o $ ar rcs lib/libfoo.a foo.o |
但是当我尝试链接静态库时...
1 | $ gcc -static mainer.c -L. -lfoo -o mainfoo |
它给了我一个错误,声称找不到静态库
1 2 |
这很奇怪,考虑到我之前问过如何使用静态库和单独文件夹上的标头,在这种情况下,找到了静态库。知道我在做什么错吗?
将
基本上,链接器告诉您找不到库foo。通常,它会在默认库目录中搜索使用-L选项提供的任何内容。您要告诉它在当前目录中查找,而不是在libfoo.a所在的lib中查找,这就是为什么它找不到它的原因。您需要将
我不能完全确定我了解您的目录结构,但是也许您需要的是:
1 | gcc -static mainer.c -L./lib -lfoo -o mainfoo |