我用 C 语言创建了一些有用的实用程序函数,我想在我的程序中使用它们。它们都位于 ../lib 文件夹中。我有一个头文件,其中包含我包含在“#include”../lib/library.h“中的函数原型。但是,当使用 gcc 编译时,我还必须提供包含函数定义的 C 文件的名称。
目前 ../lib 文件夹中只有 3 个 C 文件,但随着时间的推移可能会增加。有没有办法在编译我的程序时自动告诉 gcc 包含所有这些文件(包括我的 main.c 文件)?
创建一个库。如果您在 Linux 上,则必须选择是需要静态库还是共享库。静态库是在 linux 上使用 archiver 命令创建的。谷歌搜索“ar”。
ar cr libtest.a test1.o test2.o
现在您可以使用 gcc 或 g++ 的 -ltest 选项(ltest 是您创建的 libtest 的简写)链接此存档。如果您的代码只有 C 代码,请使用 gcc。如果它同时具有 C 和 C++,则使用 g++。
与头文件一样,链接器在一些标准位置查找库,包括包含标准系统库的 /lib 和 /usr/lib 目录。如果您希望链接器也搜索其他目录,则应使用 -L 选项,它与头文件的 -I 选项并行。您可以使用此行指示链接器在 /usr 中查找库/local/lib/MyTest 目录,然后再查看通常的位置:
g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/MyTest -ltest
虽然您不必使用 -I 选项让预处理器搜索当前目录(用于查找头文件),但您必须使用 -L 选项让链接器搜索当前目录。特别是,您可以使用以下命令来指示链接器在当前目录中查找测试库:
gcc -o app app.o -L. -ltest
共享库的创建过程也类似。一旦你掌握了它的窍门,你就可以通过makefile来处理编译和链接。
(这篇文章的部分内容来自:Advanced Linux Programming,链接:http ://www.cse.hcmut.edu.vn/~hungnq/courses/nap/alp.pdf )