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

lkn*_*dhu 11 c++ linker

我想知道如何在我创建的C++中使用静态库,首先是lib:

// header: foo.h
int foo(int a);
Run Code Online (Sandbox Code Playgroud)

.

// code: foo.cpp
#include foo.h
int foo(int a)
{
    return a+1;
}
Run Code Online (Sandbox Code Playgroud)

然后我首先编译库:

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

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

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

我现在该如何编译?我做了:

g++ -L. -lfoo prog.cpp
Run Code Online (Sandbox Code Playgroud)

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

小智 14

你要:

g++ -L.  prog.cpp -lfoo
Run Code Online (Sandbox Code Playgroud)

不幸的是,ld链接器对库的顺序很敏感.当试图在prog.cpp中满足未定义的符号时,它只会查看在命令行上出现在progters前面的库.

您也可以在命令行中指定库(如果需要,使用路径),并忘记-L标志:

g++ prog.cpp libfoo.a
Run Code Online (Sandbox Code Playgroud)