我用文件pila.h
和pila.c
了一个库。 我使用gcc pila.c -c
编译文件pila.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
,编译器不会识别包含库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 make文档 。
您可能希望将-H
传递给gcc
以让它告诉您所有包含的文件,并且您可能还想使用重制 (另外和替换make
)来调试更复杂的Makefile
-s(特别是通过运行remake -x
)。 这是Makefile
一个例子; 你会发现很多其他人!
另请阅读程序库Howto 。
对于由许多文件组成的库,您可以先单独编译,然后执行以下操作:
ar ruv mylib.a pila_funciones_extra.o pila.o ranlib mylib.a
如果库尚不存在,则此命令将导致创建库。 如果是,则更新.o文件(或添加到此库中)。 ranlib用于以对加载器有用的方式随机化库。
使用此库时,您可以:
需要了解更多c/c++开发分享如何使用GCC在C上编译库?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
gcc -o myapp myapp.c mylib.a
以上就是c/c++开发分享如何使用GCC在C上编译库?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/980139.html