【问题标题】:Automatically including multiple source files with -gcc?使用-gcc 自动包含多个源文件?
【发布时间】:2013-10-08 22:45:23
【问题描述】:

我用 C 语言创建了一些有用的实用程序函数,我想在我的程序中使用它们。它们都位于 ../lib 文件夹中。我有一个头文件,其中包含我在“#include”../lib/library.h“中包含的函数原型。但是,当使用 gcc 编译时,我还必须提供包含函数定义的 C 文件的名称。

目前 ../lib 文件夹中只有 3 个 C 文件,但随着时间的推移可能会增加。有没有办法在编译我的程序时自动告诉 gcc 包含所有这些文件(包括我的 main.c 文件)?

【问题讨论】:

  • 使用 Makefile 或其他构建工具

标签: c++ c gcc


【解决方案1】:

创建一个库。如果您在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多