c++ - 创建项目,从 Makefile 到 UNIX 中的静态/动态库

标签 c++ c makefile unix

伙计们,您能在 unix 上描述一些关于 c++ 构建 block 的事情吗?

我想创建一个链接到静态库和动态库 (.so) 的应用程序。

问题 1: 如何使用 gcc/g++ 创建静态库?如何让我的应用链接到它。

问题2: 如何在makefile中指定它,链接静态和动态库,假设两个库都有头文件

总结:多年来我一直在使用由其他人编写的 makefile 和库。因此,每次修改它,我只是简单地剪切和粘贴周围的东西,并没有真正理解它。现在我想深入了解构建/链接/创建 Makfile 的过程。

哪本好书详细地描述了这些概念?

谢谢

最佳答案

静态库通常使用 ar 命令归档。一旦你构建了所有的目标文件(最好使用 GCC 上的 -fPIC 开关),你可以像这样运行 ar:

ar -rs archivename.a list.o of.o objects.o

man 页面描述了选项。

动态库通常使用 -shared 切换到 gccld 以及带有 .so 的输出文件名来构建 扩展名。

Autotools 使用 libtool 程序来处理这个问题。我不熟悉它的用途。

可以通过使用 -l (ell) 开关(例如 -lX 来链接到 libX. so)或直接用绝对路径指定它们(例如将 /usr/lib/libX.so 添加到您的命令中)。通过在 -l 之前指定 -static.a 存档的适当绝对路径来链接静态库。

关于c++ - 创建项目,从 Makefile 到 UNIX 中的静态/动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598948/

相关文章:

C代码,好像不对,不知道为什么

macos - 在 OS X 上使用 'make'

c++ - 为什么这个变量在 C++14 中的 g++ 中没有被推断为 initializer_list?

c++ - CEdit 控件 MFC,将光标置于 SetWindowText 之后的字符串末尾

c - LVM_GETITEM 和 LVM_GETITEMTEXT 有什么区别?

c - 与 GHC 链接

c++ - Make/Cmake 子目录链接到外部库失败

c++ - 如何使 QCheckBox 只读,但不灰显

c++ - 如何从成对的初始化列表构造对象?

c - 动态链接共享对象上的宏替换