如何编译静态库并使用g ++链接到它?

时间:2014-04-15 16:39:12

标签: c++ linux static-libraries

我一直在尝试安装一个库(gzstream),它由一个.C,一个.h和一个合适的makefile组成。为了能够使用gzstream.C使用的#include <gzstream.h>,我将gzstream.h文件放在/usr/local/include中,将gzstream.C放在/usr/local/lib中。

当我尝试编译aufgabe2.cpp时,我在终端上收到以下错误消息。 aufgabe2.cpp:1:22: fatal error: /usr/local/include/gzstream.h: Permission denied compilation terminated.

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在能够使用静态库之前,需要编译它。这将要求您cd到gzstream源代码所在的目录,然后键入 make

这将编译库并创建一个输出文件 libgzstream.a

准备好之后,您可以包含头文件并编译代码。 没有严格的需要将gzstream.h复制到/ usr / local / include中。它也可以驻留在源代码所在的本地目录中。

可以很容易地包含它
#include "gzstream.h" 

查看如何使用双引号而不是尖括号来指示当前目录中的相对路径。

g ++命令行应该是这样的。

g ++ aufgabe2.cpp -L。 -lgzstream -lz

-L。告诉链接器在当前目录中查找静态库。这假设libgzstream.a被复制到存在aufgabe2.cpp的源目录中。如果没有,则给出存在libgzstream.a的-L参数的相对路径。

参数-lgzstream和-lz要求链接器链接这些库。