如何使用 GCC 在 C 上编译库?

2024-05-03

我用这些文件创建了一个库pila.h and pila.c。我编译文件pila.c with gcc pila.c -c这个库运行良好。我已经测试过了。

然后我又做了一个图书馆。这个库有文件pila_funciones_extra.h and pila_funciones_extra.c。在这个库中,我需要包含第一个库。在文件中pila_funciones_extra.h我放置了下一行来包含它:

#include "pila.h"

并在文件中pila_funciones_extra.c我写了下一行:

#include "pila_funciones_extra.h"

因为它必须如此。

但是当我尝试编译文件时pila_funciones_extra.c编译器无法识别该库的包含pila。它表示库中定义的函数、结构、常量和宏pila尚未定义。

我尝试用它来编译它gcc pila_funciones_extra.c -c and gcc pila_funciones_extra.c -c pila.o但它不起作用。

我确保所有文件都在同一个文件夹中。

我正在 Ubuntu 上工作。

谁能告诉我正确的编译方法吗?


首先,始终养成编译的习惯-Wall(甚至可能also -Wextra以获得更多警告)选项gcc;它会给你几乎所有的警告,你应该改进你的代码,直到没有警告为止。

然后你经常希望能够调试你的代码,所以也通过-g to gcc。一旦您对自己的代码充满信心,您可以询问gcc生成优化的机器代码-O2。学习使用gdb调试器。

因此,编译您的第一个库,假设它的源文件first1.c and first2.c are in FirstLib/目录,例如

cd FirstLib/
gcc -Wall -g -c first1.c -o first1.o
gcc -Wall -g -c first2.c -o first2.o

此时,您应该使用Makefile并学习如何使用make,特别是因为你想得到你的libfirst.a with

ar ruv libfirst.a first1.o first2.o
ranlib libfirst.a

然后你就可以通过-L../FirstLib -lfirst作为最后一个选项gcc使用命令编译和链接您的程序libfirst.a

然后编译你的第二个库Makefile在目录中SecondLib/其中很可能应该包含

# in SecondLib/Makefile
CC=gcc
CFLAGS= -I../FirstLib/ -Wall -g
## add your other stuff for make

等等等等。你真的想学习如何使用make并写你自己的Makefile-s 所以花点时间阅读GNU make 文档 http://www.gnu.org/software/make/manual/.

你可能想通过-H to gcc让它告诉你所有包含的文件,你可能还想使用remake http://bashdb.sourceforge.net/remake/(另外和替换make)来调试更复杂的Makefile-s(特别是通过运行remake -x). Here https://stackoverflow.com/a/16751650/841108是一个例子Makefile;你会发现很多其他的!

另请阅读程序库指南 http://www.tldp.org/HOWTO/Program-Library-HOWTO/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 GCC 在 C 上编译库? 的相关文章

随机推荐