【问题标题】:howto add a static library (.a) into a C++ program?如何将静态库 (.a) 添加到 C++ 程序中?
【发布时间】:2011-05-03 13:16:01
【问题描述】:

我想知道如何在 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

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

// 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.aIIRC
  • @sehe: -lfoo 大致相当于在命令行上列出 libfoo.a。不过顺序确实很重要。

标签: c++ linker


【解决方案1】:

你想要:

g++ -L.  prog.cpp -lfoo

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

您也可以只在命令行上指定库(如果需要,还可以指定路径),而无需考虑 -L 标志:

g++ prog.cpp libfoo.a

【讨论】:

  • 对,如果提问者想知道原因,this link 用非常简洁的术语解释了链接器顺序是从左到右的。 (啊,我添加这条评论后,回答者补充了一点信息)。
猜你喜欢
  • 2013-08-26
  • 2019-07-23
  • 2017-12-08
  • 2012-08-03
  • 2014-02-09
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 2012-04-09
相关资源
最近更新 更多