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

标签 c++ linux static-libraries

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

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

我做错了什么?

最佳答案

在能够使用静态库之前,你需要编译它。这将要求您 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 要求链接器链接这些库。

关于c++ - 如何编译静态库并使用 g++ 链接到它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089655/

相关文章:

c++ - if ('fstream object' ) 如何根据文件是否打开返回真值或假值?

linux - for循环回显顺序命令行?

c - 如何使用 Linux list.h API 避免内存泄漏

android - 使用用于分发的静态库构建 Android NDK 应用程序

c++ - 不允许从函数返回函数。我怎么能?

c++ - 为什么 C++ 需要范围解析运算符?

c++ - C++ 中的 "string"、 "stream"和 "stringstream"类是什么?

linux - 将输出打印到 linux 中的文本文件中

ios - 错误 : "File was built for archive which is not the architecture being linked (armv7s)"

c++ - 链接到动态库的静态库中的 undefined symbol