如何将静态库 (.a) 添加到 C++程序?
我想知道如何使用我创建的 C++ 静态库,首先是 lib:
// header: foo.h
int foo(int a);
。
// code: foo.cpp
#include foo.h
int foo(int a)
{
return a+1;
}
然后我首先编译该库:
- g++ foo.cpp
- 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:
- g++ foo.cpp
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您想要:
不幸的是,ld 链接器对库的顺序很敏感。当尝试满足 prog.cpp 中未定义的符号时,它只会查看命令行上 prog.cpp 之后出现的库。
您还可以只在命令行上指定库(如果需要,可以使用路径),而忽略 -L 标志:
You want:
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: