实际上如何使用 C 库?

2024-03-25

我确信这个问题已经被问过很多次了,但我无法弄清楚。耐心听我说。

因此,当您下载库时,您会得到一堆 .c 和 .h 文件,以及许多其他内容。现在假设您想使用这个库编写一个程序。

我将所有 .h 文件复制到我的项目目录中。它只是无法编译。

太好了,然后我将库作为一堆 .dll 来获取,并将这些 dll 复制到我的项目目录中。仍然无法编译。

这是如何运作的?

在为项目创建文件夹后,您会做什么?您将库包的哪些部分复制/粘贴到文件夹中?你如何使它能够编译?请跟我一起完成这些步骤。

  1. .h 文件放在哪里?
  2. .dll 文件放在哪里?
  3. 如何编译?

Thanks.

(我试图使用的库是 libpng,我在 Windows 中使用 MinGW,并且我希望像往常一样从命令行进行编译。)

(根据我收集的信息,您将 .h 文件放在目录 A 中,将 .dll 文件放在目录 B 中,您可以使用 -l 和 -L 编译器选项告诉编译器在哪里找到它们,这是正确的吗?)


以下是编译和构建基本 C 项目时发生的情况的简要指南:

  • 第一阶段编译所有源文件 - 这将获取您编写的源文件并将它们转换为所谓的文件目标文件。在这个阶段,编译器需要知道您在代码中使用的所有函数的声明,甚至是在外部库中,因此您需要使用#include包含您使用的任何库的头文件。这也意味着您需要告诉编译器这些头文件的位置。 With GCC http://gcc.gnu.org/你可以使用-I命令行输入要搜索头文件的目录。

  • 下一阶段是将所有目标文件链接到一个可执行文件中。在此阶段,链接器需要解析对外部库的调用。这意味着您需要对象形式的库。大多数库都会为您提供有关如何生成此文件的说明,或者可能会提供现成的文件。在 Linux 下,库文件通常是.a or .so文件,尽管它可能只是一个.o。同样,您可以使用 -L 选项将库的目标文件的位置提供给 GCC。

因此你的命令行将如下所示:

gcc myProg.c -I/path/to/libpng/include -L/path/to/libpng/lib -lpng -o myProg.exe

(请注意,当使用-l命令行GCC自动添加lib到图书馆的开头,所以-lpng causes libpng.a被链接进去。)

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实际上如何使用 C 库? 的相关文章

随机推荐

  • Rails Devise http 验证移动设备

    我正在尝试向我的服务器 ruby on Rails 应用程序验证 Android 客户端应用程序 该应用程序使用 Devise gem 但我尝试过 http 身份验证 并发布请求进行身份验证 并且服务器仅对任何给定的用户名 密码响应 200
  • 将具有不同列的大数据文件合并为一个大文件

    我有 N 个制表符分隔的文件 每个文件都有一个标题行 说明列的名称 有些列是所有文件共有的 但有些列是唯一的 我想将所有文件合并成一个包含所有相关标头的大文件 Example gt cat file1 dat a b c 5 7 2 3 9
  • 为 matplotlib 文本设置固定位置

    虽然有几个问题与我的问题类似 但几乎所有问题都与文本框 图例和注释有关 使用循环 我想显示 32 个属性的具体信息 左侧的直方图和右侧的统计信息 仅处理一个属性非常简单 我将 x y 设置为文本位置 就是这样 Histogram sns d
  • MKMapView释放内存

    我遵循了几个SO问题中提供的建议 例如this one https stackoverflow com questions 20138419 stop ios 7 mkmapview from leaking memory 为了释放MKMa
  • 使用批处理变量重命名文件

    我有以下代码 set DATE date echo DATE set DAY DATE 0 2 echo DAY rename file09 txt file DAY 09 txt pause 它应该重命名一个文本文件并将该月的日期放入文件
  • 创建电报 auth_key

    我最近开始使用 telegram api 在第一阶段 我提出了接收请求auth key 这是我的 C 代码 auth key id in unencrypted message is ZERO Int64 auth key id 0 thi
  • 巨大的 WPF 视觉效果渲染不精确 - 有解决方案吗?

    在 WPF 中渲染巨大的视觉效果时 视觉效果会扭曲 并且随着坐标的增加扭曲得更加严重 我认为它与渲染管道中使用的浮点数据类型有关 但我不完全确定 无论哪种方式 我都在寻找解决问题的实际解决方案 为了演示我正在讨论的内容 我创建了一个示例应用
  • 强制浏览器每次都重新加载小程序

    我已经使用了我的小程序部署Java js http download oracle com javase 6 docs technotes guides jweb deployment advice html appletTagAttrib
  • 无法使用自定义表模型通过 table.getColumn 方法获取列索引

    我使用 AbstractTableModel 创建了一个自定义 TableModel 我能够填充我的 JTable 但我的 JTable 有一个按钮列 名为 Button1 因此 我使用 CellRenderer 方法向列添加按钮 使用 C
  • 启用/禁用带有复选框的文本区域

    我的任务是使用 JavaScript 在单击复选框时启用 打开 并在单击 关闭 时禁用它 但是 代码仍然无法工作 无论我是否单击该复选框 都不会执行任何操作 div h2 Order Information h2 div class ent
  • 如何检查 Clojure 代码是否正在 REPL 内进行计算?

    我想根据我的代码是从 REPL 运行还是运行已编译的 jar 来以不同的方式格式化我的日志 有什么简单的方法可以做到这一点吗 我在想也许 Leiningen 在运行 REPL 时会在某个地方留下痕迹 defn current stack t
  • 提取字符串 PHP 中两个字符之间的子字符串

    是否有 PHP 函数可以提取字符串中 2 个不同字符之间的短语 就像是substr Example String modid 256 First Second id substr string First Second Thus id将会2
  • PrimeNG 使用延迟加载表设置第一个页面

    我正在使用组件p table使用 Paginator 和 延迟加载 我根据需要制作了一个搜索组件 我试图解决过滤时的问题 并且页面索引位于另一页上 例子 页面索引 2过滤文本 texto 然后 我更新表上的记录和页数 但如果结果具有更多或相
  • Firebase InstanceId 无法解析标识符 swift4

    我最近更新了我的 SWIFT 应用程序 pod 文件 并且由于 firebase 版本现已更新到 5 2 现在在获取设备实例 ID 时出现以下错误 let tokenId InstanceID instanceID token error
  • 如何将一个数组的值放入另一个数组中?

    String input txtInput getText char charArray input toCharArray char flipArray null System out println charArray length f
  • 内连接三个表

    我有三个表 我希望通过它们之间的公共列进行内部连接 假设我的桌子是 TableA TableB TableC 我想加入A B 但随后也B C这一切都源于这个共同的领域 我将其称为共同的 我已经像这样连接了两个表 dbo tableA AS
  • Pandas 与正则表达式“.”不一致点元字符?

    考虑 df Cost Store 1 22 5 Store 1 Store 2 要将这些点转换为 nan 我可以使用 df replace np nan regex True Cost Store 1 22 5 Store 1 NaN St
  • 如何让Eclipse使用JDK8来编译项目?

    我正在尝试新的 jdk8 这里提供什么http jdk8 java net lambda http jdk8 java net lambda 我可以从命令行编译并运行我的项目 我还可以将这个新的 JDK 添加到Installed JREs在
  • 获取 ngComponentOutlet 的引用

    我正在使用 ngComponentOutlet 动态创建一个组件 听上去像 import Component NgModule from angular core import BrowserModule from angular plat
  • 实际上如何使用 C 库?

    我确信这个问题已经被问过很多次了 但我无法弄清楚 耐心听我说 因此 当您下载库时 您会得到一堆 c 和 h 文件 以及许多其他内容 现在假设您想使用这个库编写一个程序 我将所有 h 文件复制到我的项目目录中 它只是无法编译 太好了 然后我将