在yaml.h库C中找不到函数

问题描述

我尝试读取C语言中的yml文件代码:: Blocks IDE),但收到yaml_parser_initialize的未定义参考错误

INSERT INTO table_name ( value )
VALUES ( TIMESTAMP '2020-10-15 0:34:51. 751000000' );

函数存在于yaml.h中。我将yaml库链接如下:

  1. 项目->构建选项->链接器设置:添加了src \ .libs \ libyaml.a
  2. 项目->构建选项->搜索目录->编译器:添加了包含库:yaml-0.2.5 \ include。
  3. 项目->构建选项->搜索目录->链接器:添加了包含库:yaml-0.2.5 \ include。

操作系统:Win10

谢谢。

解决方法

简而言之,我将尝试回答该问题并根据请求更新我的答案。

如果您在Linux操作系统上构建,则无论您的主机操作系统是Windows(您可以将Linux作为虚拟机运行),通常都与 .a 链接。或 .so 库文件。

如果您建立的环境是Windows,则无论主机操作系统是什么,通常都将链接到 .lib .dll 库。

话虽如此,上述OS对于如何提供文件路径具有不同的约定。 在Linux上,路径如下:/path/to/libs/libyaml.a。 在Windows上,路径像这样C:\Program Files\libs\yaml.lib

在操作系统上运行的任何应用均遵循操作系统路径约定。对于您的情况,Code::Blocks请求您按照来宾操作系统的约定提供路径。

下面的文字是使用yamlUbuntu构建代码的两种方法。

更新

到目前为止,我尚未使用Code::Blocks。我已安装IDE来检查您的选择。 您谈论UbuntuCyaml。那将是:

1) New Project-> Console Application-> C

2) <Whichever project names you wish>

3) <Whatever compiler configuration you like>

那是创建一堆CB调用项目的文件。现在,我不知道您使用哪种yaml库。但是您谈论的是UbuntuC,所以...

1) apt search libyaml-> <guess what yaml are>-> apt install libyaml-dev

2) pkg-config --list-all | grep yaml为我提供了yaml-0.1的输出。这是我想提供给pkg-config的参数的名称。

顺便说一句,您似乎获得了yaml库的其他版本。但是,我们仍然需要知道正确的字符串以作为编译器和链接器参数提供。

3) pkg-config --libs让我-lyaml

4) pkg-config --cflags让我空了一行。因此,include路径对于构建环境是众所周知的

这样,我们知道了链接器参数(-lyaml)和编译器参数(<empty string>)。现在,我尝试将它们插入CB可以找到它们的位置。

1)菜单选项:Project-> Build options... 2) Compiler settings->不变 3) Linker settings-> link libraries-> yaml

CB中的库应不加 -l前缀,因此应与上面相同。点击构建,一切正常。

更新git版本

您的Yaml版本似乎比我的发行版新。如果您需要最新版本,请放手从git安装。

1) apt remove libyaml-dev。这样就不会与库版本发生冲突。

我确实选择了Canonical repository for libyaml,因为我的发行版是Ubuntu。您需要mkdir作为源,cd到该目录。

2) git clone https://github.com/yaml/libyaml

3) cd libyaml

4)。按照instructions进行构建和安装。

5) pkg-config --list-all | grep yaml让我yaml-0.1 6) pkg-config --cflags yaml-0.1产生-I/usr/local/include 7) pkg-config --libs yaml-0.1得到这个-L/usr/local/lib -lyaml

好吧,我们得到了该库的编译器和链接器标志。 link library选项保持不变。您需要将-L/usr/local/lib添加到Other linker options。我没有找到可以在其中添加编译器标志的位置,因此我添加了新标志。在CB中将为Compiler flags-> <right mouse click>-> New flag。以某种方式命名该标志,然后将-I/usr/local/include字符串插入到Compiler flags输入行中。点击OK按钮。选中新创建的标志前面的复选框。构建并运行。