【问题标题】:Distribute Libraries Written in C分发用 C 编写的库
【发布时间】:2012-05-21 18:48:25
【问题描述】:

假设我有一些用 C 语言编写的代码,其中定义了一些数据结构和一些用于处理这些结构的函数,所有这些都在一个名为 src1 的目录中。假设现在我想分发此代码。

如果我想在项目中使用 src1 中的外部代码,我应该怎么做?我是否应该将 src1 中的代码编译为 .a 存档,然后将该存档包含在我要使用的其他项目中?

基本上我需要知道的是在项目中使用外部代码的正确约定。

提前致谢。

【问题讨论】:

  • 视情况而定。你想把它分发给谁?

标签: c conventions


【解决方案1】:

要以库的形式分发代码,您需要按照以下步骤操作:

  1. 列出您希望向其他项目公开的结构、函数、宏等集合。
  2. 将 Point-1 中列出的数据集分组到一组头文件中。其余的内部内容可以在其他头文件中。
  3. 将您的代码编译成静态(它将 .a 用于基于 linux 的系统或 .lib 用于 Windows)或 动态 库(对于基于 linux 的系统,它将是一个 .so/.sl 或对于 Windows 的 .dll)
  4. 将您的库和一组公开的头文件(如上面第 2 点所决定)提供给其他项目。

使用 gcc 创建静态或共享库的链接是here

在 Windows 中使用 MSVC 创建静态或动态库的链接是 here

【讨论】:

  • 谢谢!我会去做!还要感谢您提供的链接和步骤!
【解决方案2】:

是的,您可以使用 静态库,它在 Linux 中是一个 .a 文件,在 Windows 中通常是一个 .lib。当然,这也需要您共享标头,因此使用该库的代码可以具有正确的数据结构定义。

【讨论】:

  • 谢谢!我将使用 .a 文件
【解决方案3】:

您可以使用任何格式(.a 或 .so)来分发您的库。第一个是静态盟友 Inked,第二个是动态链接。要了解更多信息,请参阅此答案Difference between static and shared libraries?

无论你使用哪个,你总是以相同的方式链接它。

gcc -L/path/to/lib -lsrc1 source.c -o source.o

这里,/path/to/lib 可以包含您之前编译的任何libsrc1.solibsrc1.a

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    相关资源
    最近更新 更多