我做了该文件的库pila.h
和pila.c
。 我编译文件pila.c
与gcc pila.c -c
和这个库工作正常。 我测试。
这时我犯了另一个库。 该库有文件pila_funciones_extra.h
和pila_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 -c
和gcc pila_funciones_extra.c -c pila.o
,但它不工作。
我确信,所有的文件都在同一个文件夹。
我工作在Ubuntu。
谁能告诉我编译它的正确方法?
首先,总是习惯用编译-Wall
(甚至还 -Wextra
获得更警告)选项gcc
; 它可以让你几乎所有的警告,你应该提高你的代码,直到没有任何警告中给出。
然后,你往往希望能够调试你的代码,所以还通过-g
到gcc
。 一旦你确信你的代码,你可以问gcc
生产优化的机器代码-O2
。 学习使用gdb
调试器。
所以编译第一个库,假设它的源文件first1.c
和first2.c
在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
与
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使文档 。
你可能想通过-H
到gcc
有它告诉你所有的头文件,你可能还需要使用重拍 (除了和更换make
)来调试更复杂Makefile
-S(特别是通过运行remake -x
)。 这里是一个例子Makefile
; 你会发现其他许多!
也可以参考程序库HOWTO 。
对于许多文件,你可以先编译然后分别再为此组成库:
ar ruv mylib.a pila_funciones_extra.o pila.o
ranlib mylib.a
此命令会导致如果不存在要创建的库。 如果是这样,则.o文件被更新(或添加到该库)。 该ranlib的是用于随机库的方式,是装载机有用。
当你使用这个库,你这样做:
gcc -o myapp myapp.c mylib.a