如何使用GCC编译库基于C?(How to compile library on C using G

2019-08-17 00:54发布

我做了该文件的库pila.hpila.c 。 我编译文件pila.cgcc pila.c -c和这个库工作正常。 我测试。

这时我犯了另一个库。 该库有文件pila_funciones_extra.hpila_funciones_extra.c 。 在这个图书馆,我需要包括第一个库。 在文件pila_funciones_extra.h我把下一行,包括它:

#include "pila.h"

并在文件pila_funciones_extra.c我把下一行:

#include "pila_funciones_extra.h"

因为它必须是。

但是,当我试图编译文件pila_funciones_extra.c doensn't识别库包含编译器pila 。 它说,在库中定义的函数,结构,常量和宏pila尚未确定。

我试图编译它gcc pila_funciones_extra.c -cgcc pila_funciones_extra.c -c pila.o ,但它不工作。

我确信,所有的文件都在同一个文件夹。

我工作在Ubuntu。

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

Answer 1:

首先,总是习惯用编译-Wall (甚至 -Wextra获得更警告)选项gcc ; 它可以让你几乎所有的警告,你应该提高你的代码,直到没有任何警告中给出。

然后,你往往希望能够调试你的代码,所以还通过-ggcc 。 一旦你确信你的代码,你可以问gcc生产优化的机器代码-O2 。 学习使用gdb调试器。

所以编译第一个库,假设它的源文件first1.cfirst2.cFirstLib/目录下,如与

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

在这一点上,你应该使用一个Makefile ,并学习如何使用make ,特别是因为你希望得到您的libfirst.a

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使文档 。

你可能想通过-Hgcc有它告诉你所有的头文件,你可能还需要使用重拍 (除了和更换make )来调试更复杂Makefile -S(特别是通过运行remake -x )。 这里是一个例子Makefile ; 你会发现其他许多!

也可以参考程序库HOWTO 。



Answer 2:

对于许多文件,你可以先编译然后分别再为此组成库:

ar ruv mylib.a pila_funciones_extra.o pila.o
ranlib mylib.a

此命令会导致如果不存在要创建的库。 如果是这样,则.o文件被更新(或添加到该库)。 该ranlib的是用于随机库的方式,是装载机有用。

当你使用这个库,你这样做:

gcc -o myapp myapp.c mylib.a


文章来源: How to compile library on C using GCC?