如何将静态库(.a文件)添加到C++程序中?

17

我想知道如何在C++中使用我创建的静态库,先看下这个库:

// header: foo.h
int foo(int a);

.

// code: foo.cpp
#include foo.h
int foo(int a)
{
    return a+1;
}

然后我首先编译库:

  1. g++ foo.cpp
  2. ar rc libfoo.a foo.o

现在我想在某个文件中使用这些库,例如:

// prog.cpp
#include "foo.h"
int main()
{ 
    int i = foo(2);
    return i;
}

我现在应该如何编译这些代码? 我已经制作了:

g++ -L. -lfoo prog.cpp

但是因为找不到函数foo而出现错误


g++ -L. -lfoo prog.cpp libfoo.a,如果我没记错 - sehe
@sehe:-lfoo 在命令行上的作用类似于列出 libfoo.a。但是顺序确实很重要。 - Jan Hudec
1个回答

21

您想要:

g++ -L.  prog.cpp -lfoo

不幸的是,ld链接器对库的顺序非常敏感。当尝试满足prog.cpp中未定义的符号时,它只会查看出现在命令行上prog.cpp之后的库。

您也可以直接在命令行上指定库(如果需要,带有路径),并忘记-L标志:

g++ prog.cpp libfoo.a

没错,如果提问者想知道为什么,这个链接讲得很简明,解释了链接器顺序是从左到右的原因。(啊,在我添加这条评论之后,回答者又补充了一些信息)。 - e.dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接