在之前的一组讲义中,我展示了编码64进制整数的代码。除了将这些代码作为源代码添加到项目中,我们还可以将这些代码编译成一个库,然后将该库链接到任何需要它的项目中。
这些课堂讲稿将涵盖在Linux上创建和使用库的过程。
我们已经有一个C源代码文件和伴随的头文件,我们需要的代码。我们要做的唯一改变是如何编译代码。
下面是一个新的makefile的代码,我将使用它将代码编译成一个库,然后将该库安装到我们的系统上:
-lbase64 - 0测试库:base64. cGCC -共享base64。0 - 0 libbase64。所以base64。0: base64.c GCC -c -fpic base64.c install: library mkdir /usr/include/base64 cp base64.h /usr/include/base64/base64.h cp libbase64. c所以/usr/lib/libbase64.so
当您在Linux上构造一个库时,您有两种选择来制作哪种库文件。第一种选择是将代码编译成.a文件形式的静态库。然后将该静态库文件链接到需要它的任何项目中。第二个选项,也就是我们将在这里使用的选项,是以。so文件的形式将代码编译成一个共享库。共享库被软链接到可执行文件中:在软链接中,库代码保留在。so文件中,不会被复制到可执行文件中。相反,可执行文件在运行时将共享库文件加载到内存中。第二种方法的优点是一个共享库文件可以被多个可执行文件使用。这样可以节省电脑空间。
要将代码编译成库,我们首先将base64.c源代码文件编译成一个名为base64.o的目标文件。执行此操作的编译器命令使用-c开关告诉gcc只将base64.c编译为目标文件,而不是可执行文件。我们在此步骤中创建的目标文件最终可以链接到可执行文件中,或者可以链接到库文件中。要执行第二个选项,我们还使用-fpic开关将代码编译成与位置无关的代码文件。
为了将目标文件链接到共享库文件,我们再次运行带有-shared选项的gcc,告诉它将base64链接到共享库libbase64.o。Linux中共享库的命名约定是以‘lib’开头。
要编译库,我们现在运行命令
让赢博体育
我们的库现在由一个共享库文件和附带的头文件组成。为了使这两个东西都有用,我们现在必须把这些东西复制到系统上的几个标准位置。
当有人想要使用我们的库时,他们会先放入一个include语句
# include < base64 / base64.h >
到它们的源代码文件中。注意这里使用了<>样式include。当C编译器读取带有<>的include语句时,它将尝试在系统头文件区域中搜索所请求的头文件。在大多数Linux系统中,系统头的位置是/usr/include。为了安装我们的库,我们将在/usr/include中创建一个名为base64的文件夹,然后将我们的头文件复制到该文件夹中。
要使用我们创建的共享库,我们需要在编译项目时添加一个编译器开关,告诉gcc将特定的库链接到项目中。在本例中,我们将使用-lbase64开关。当gcc看到这个开关时,它将寻找名为libbase64.so的共享库文件。它将在存储共享库文件的系统位置搜索该共享库。在大多数Linux系统中,有几个位置可以存储共享库。其中一个位置是/usr/lib目录。这就是我们要存储共享库的地方。
为了在正确的位置安装头文件和共享库文件,我在makefile中添加了一个安装目标。makefile这一节中的代码创建了/usr/include/base64目录,然后将头文件和库文件复制到正确的位置。
要将赢博体育内容复制到正确的位置,我们只需运行命令
使安装