1. 简介
上一篇文章,我介绍了基于yaml库的源码完成对其库的调用,但是很多时候,我们已经有so文件了,这种情况下,如何使用bazel调用yaml的so文件呢?
2. 项目文件及内容
2.1 下载yaml源码
首先去github上下载yaml的库,链接如下所示:
GitHub - jbeder/yaml-cpp: A YAML parser and emitter in C++
下载完成之后,解压进入文件夹,
我们这里关注文件夹 include 和 src,以及文件 BUILD.bazel,后面会用到。
2.2 创建工作空间
我们创建一个bazel的工作空间,如下文件目录如下所示:
这里要强调一下,yaml库的头文件包括两部分,一部分就是在include/yaml-cpp文件夹下,另一部分在src文件夹下,在BUILD文件中,我们使用函数cc_import将这两部分头文件导入,一定要全部导入,否则会报错 "include/yaml-cpp/yaml.h"找不到。
(1)include文件就是yaml的头文件
(2)src就是yaml的src文件,这两个文件 标题2.1 下载yaml源码有介绍过,按理说只需要把src中的头文件拿出来就行,我这里偷懒了一下,全部拷贝过来了。
(3)lib文件中包含了yaml编译生成的so库libyaml-cpp.so.0.7。
(4)main.cc的内容如下:
#include <iostream>
#include "include/yaml-cpp/yaml.h"
using namespace std;
int main() {
YAML::Node config = YAML::LoadFile("/home/hello/code/test_code/bazel/bazel3/main/config/config.yaml");
cout << "name:" << config["name"].as<string>() << endl;
cout << "age:" << config["age"].as<string>() << endl;
return 0;
}
(5)BUILD内容如下:
cc_binary(
name = "main",
includes = ["include"],
srcs = ["main.cc"],
deps = [":yaml-cpp"],
)
cc_import(
name = "yaml-cpp",
hdrs = glob(["include/**/*.h", "src/*.h"]),
shared_library = "lib/libyaml-cpp.so.0.7",
)
其他的操作就不多做赘述了,都可以在上一篇文章【bazel】调用yaml库中找到相应的介绍。