无法找到静态库

时间:2013-04-09 22:40:39

标签: c gcc static-libraries header-files

让我先解释一下背景。我有一个带有函数声明的标题,一个带有函数体的.c程序,以及主程序。

foo.h中

#ifndef _FOO_H_
#define _FOO_H_

void foo();

#endif

foo.c的

 #include<stdio.h>
 #include "include/foo.h"

 void foo()
 {
     printf("Hello\n");

 }

mainer.c

#include <stdio.h>
#include "include/foo.h"
int main()
{       foo();
        return 0;
}

出于此程序的目的,标头和静态库都需要位于不同的文件夹中,因此标头位于/include/foo.h上,生成的静态库将位于/lib/libfoo.a上,两者都是主目录上的.c程序。我们的想法是生成目标程序,然后是静态库,然后链接静态库以创建可执行文件,最后执行程序。

我在创建目标程序和静态库时都没有问题。

$ gcc -c foo.c -o foo.o

$ ar rcs lib/libfoo.a foo.o

但是当我尝试链接静态库时......

$ gcc -static mainer.c -L. -lfoo -o mainfoo 

它给我一个错误,声称无法找到静态库

/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status

考虑到I asked before how to work with static libraries and headers on separate folders and in this case the static libraries were found,这很奇怪。知道我做错了什么吗?

3 个答案:

答案 0 :(得分:2)

-L.更改为-Llib,因为您在那里创建了.a文件。

答案 1 :(得分:1)

我不完全确定我理解你的目录结构,但也许你需要的是:

gcc -static mainer.c -L./lib -lfoo -o mainfoo 

答案 2 :(得分:1)

基本上链接器告诉你它找不到库foo。它通常在默认库目录中搜索+任何使用-L选项提供的目录。你告诉它查看当前目录,但不是libfoo.a所在的lib,这就是为什么它找不到它。您需要将-L.更改为-Llib