【问题标题】:Adding a custom library to c programs向 c 程序添加自定义库
【发布时间】:2016-02-26 18:44:42
【问题描述】:

我正在使用 Ubuntu Linux 我已经制作了一个自定义静态库 Mylib.a,我只能将它包含在与静态库位于同一目录中的那些 c 文件中。

我想让它成为一个通用库,以便我可以将库文件包含到我想要的任何 c 文件中,而不管其位置如何

【问题讨论】:

  • gcc 将在特定文件夹中搜索,有关详细信息,请参阅文档(您可以从 LIBRARY_PATH 环境变量开始,也可以使用 -v 进行编译以查看搜索位置)。或者,您可以在gcc 命令行上提供完整路径(在任何地方)。
  • 如何包含这个库?您必须包含标题并链接库。

标签: c linux ubuntu-14.04


【解决方案1】:

要使用静态库,您必须在使用该库的 .c 文件中包含标头,然后链接该库。如果库的名字是libstatic.a 那么:

gcc -o yourprog yourprog.c -lstatic

如果库不在同一目录中,使用 -L 选项指定路径:

gcc -o yourprog yourprog.c -L/path-to-lib -lstatic

(另见这篇文章:How to link to a static library in C?

【讨论】:

    【解决方案2】:

    您可以将该.a 文件(或更好的.so 文件)复制到标准位置,例如/usr/lib

    如果从命令行编译,还需要指定库名(即使它已经在/usr/lib中),与指定标准库如-lpthread时相同。

    也可以在makefile中指定库路径和库名

    【讨论】:

    • 我确实将它复制到 /usr/lib 但它仍然给我编译错误
    • 是链接错误还是编译错误?您还记得将.h 文件也复制到/usr/include 吗?
    • 我没有复制.h文件
    • 有效!当我运行目标文件 gcc -o ex ex.o -l_mylib 时,我仍然必须提及库名称有没有办法将此库永久添加到 MakeFile
    • 有没有办法创建一个可以在没有 -l 的情况下调用的自定义库? (如 -lpthread)
    【解决方案3】:

    正如 Adriano 所写,您可以包含一个库,即使它与您的 c 文件不在同一目录中。但是,您必须指定在哪里查找您使用的库。

    请看这里:https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html

    希望我能帮上忙,

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2017-05-13
      • 2012-09-01
      相关资源
      最近更新 更多