【问题标题】:How do I use a compiled binary for a C library on Linux?如何在 Linux 上为 C 库使用已编译的二进制文件?
【发布时间】:2013-08-17 02:51:11
【问题描述】:

我从here 下载了libftp 源代码,并使用make 编译它。现在我在同一个目录中只有一个名为“ftp”的二进制文件。我是否需要将其移动到根目录之一,例如 /usr/bin?我还需要源文件以便#include 库吗?

【问题讨论】:

  • 如果你想让它真的像一个库,你需要构建对象,然后使用ar将它打包成库格式(例如参见cs.dartmouth.edu/~campbell/cs50/buildlib.html)。然后,生成的文件将进入您的 C lib 路径,您可以通过 gcc -lmylib myprogram.c 在编译行中引用它。
  • 说实话,我一直在努力完全掌握图书馆的完整概念以及它们是如何从头开始工作的。我真的不知道我想怎么做,我只是想按照预期的方式使用它。那么如果我目前有一个已编译的二进制文件,下一步可能是什么?我如何才能输入#include <...> 并开始使用它?
  • #include 只是告诉你的程序它是如何定义的。然后链接器需要以某种方式找到它。一种方法是将对象 (.o) 文件放在已知目录中,然后说 gcc myprog.c /path_to/mylib.o。这是最简单的方法。如果您想在其他地方的一堆不同程序中使用它,那么将其作为库是有意义的。我提供的链接解释了制作 lib 的过程。

标签: c linux ubuntu-12.04


【解决方案1】:

要在您自己的代码中使用库,首先您需要该库 - 通常命名为 lib{name}.a 或 lib{name}.so。链接期间将需要该库。因此,当您创建时,请确保它创建了库,而不仅仅是 ftp 二进制文件。

其次,在编译时您将需要头文件,这样#include 就不会抛出错误。因此,就源代码而言,您至少需要头文件。

【讨论】:

  • 好的。因此,我将获取所有*.o 文件并使用ar 制作libftp.a 文件。将该文件移动到 /usr/lib。然后将所有.h 文件移动到/usr/include。那么我应该可以在我自己的代码中#include主头文件并在编译时链接库?
  • 是的,除非您可能会考虑将库放在 /usr/local/lib 中,将头文件放在 /usr/local/include 中。
  • 没错。还有一点需要注意的是 gcc(或您正在使用的任何编译器)应该能够找到 lib 和 .h 文件。因此,请确保正确设置所有标志(I、L、l、LD_LIBRARY_PATH 等)。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多