c/c++语言开发共享如何使用GCC在C上编译库?

我用文件pila.hpila.c了一个库。 我使用gcc pila.c -c编译文件pila.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 ,编译器不会识别包含库pila 。 它表示库pila中定义的函数,结构,常量和宏尚未定义。

我尝试使用gcc pila_funciones_extra.c -cgcc pila_funciones_extra.c -c pila.o编译它,但它不起作用。

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

我正在研究Ubuntu。

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

    首先,总是习惯用-Wall (甚至可能还有 -Wextra以获得更多警告)选项来gcc ; 它几乎给你所有警告,你应该改进你的代码,直到没有给出警告。

    然后你经常希望能够调试你的代码,所以也把-g传递给gcc 。 一旦您对代码有信心,就可以要求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 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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐