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

时间:2011-05-03 13:16:02

标签: c++ linker

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

// 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
  3. 现在我想在某些文件中使用这些库:

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

    我现在必须如何编译这些? 我做了:

    g++ -L. -lfoo prog.cpp
    

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

1 个答案:

答案 0 :(得分:12)

你想:

g++ -L.  prog.cpp -lfoo

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

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

g++ prog.cpp libfoo.a