问题描述
我尝试读取C语言中的yml文件(代码:: Blocks IDE),但收到yaml_parser_initialize的未定义参考错误:
INSERT INTO table_name ( value )
VALUES ( TIMESTAMP '2020-10-15 0:34:51. 751000000' );
- 项目->构建选项->链接器设置:添加了src \ .libs \ libyaml.a
- 项目->构建选项->搜索目录->编译器:添加了包含库:yaml-0.2.5 \ include。
- 项目->构建选项->搜索目录->链接器:添加了包含库: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
请求您按照来宾操作系统的约定提供路径。
下面的文字是使用yaml
库Ubuntu
构建代码的两种方法。
更新
到目前为止,我尚未使用Code::Blocks
。我已安装IDE
来检查您的选择。
您谈论Ubuntu
,C
和yaml
。那将是:
1) New Project
-> Console Application
-> C
。
2) <Whichever project names you wish>
3) <Whatever compiler configuration you like>
那是创建一堆CB
调用项目的文件。现在,我不知道您使用哪种yaml
库。但是您谈论的是Ubuntu
和C
,所以...
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
按钮。选中新创建的标志前面的复选框。构建并运行。