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

发布于 2024-11-05 03:11:31 字数 509 浏览 0 评论 0原文

我想知道如何使用我创建的 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

I want to know how I can use a static library in C++ which I created, first the lib:

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

.

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

then I compile the library first:

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

now I want to use these library in some file like:

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

how must I compile these now?
I made:

g++ -L. -lfoo prog.cpp

but get an error because the function foo would not be found

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陪你到最终 2024-11-12 03:11:31

您想要:

g++ -L.  prog.cpp -lfoo

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

您还可以只在命令行上指定库(如果需要,可以使用路径),而忽略 -L 标志:

g++ prog.cpp libfoo.a

You want:

g++ -L.  prog.cpp -lfoo

Unfortunately, the ld linker is sensitive to the order of libraries. When trying to satisfy undefined symbols in prog.cpp, it will only look at libraries that appear AFTER prog.cpp on the command line.

You can also just specify the library (with a path if necessary) on the command line, and forget about the -L flag:

g++ prog.cpp libfoo.a
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文