【首发】在Windows下编译libyang库

1. 前言

最近公司项目需要用到YANG和NETCONF,各方比较后还是选择了libyang,如果只是想用用yang模型的工具话,可以考虑用pyang,直接命令行输入下面的命令即可安装,当然前提得安装了Python哟。安装完成后在命令行中使用基本的操作命令就可以了。

pip install pyang

上述的pyang有个缺点,不能二次开发,当然也有可能是我技术不行,没找到二次开发的方法吧。不过这都不重要了,关键是根据我的实际情况,用Python二次开发后还得用C++去调用,很麻烦。

综上所述,我还是编译libyang吧,过程中真是一波三折,不断在放弃和EMO的边缘挣扎。网上冲浪两天,真就一篇在Windows下编译libyang的文章都没有,绝望啊,一个cv工程师想cv一下,却发现没有了cv对象。但聪明的小脑袋怎么会没有办法呢?多方留言后,libyang的一位贡献者给了我希望,在此谢谢这位大佬!

水文到此结束,下面实操起来!

2. 编译环境与前期准备

2.1 编译环境说明

我在公司的电脑上已经编译通过了,环境如下:

名称版本
系统Windows 10 x64
IDEMicrosoft Visual Studio 2022(截至2023.11.22日的最新版本)
CMake3.27.8

写这篇文章的实操是在我自己家的电脑上完成的,环境如下:

名称版本下载地址
系统Windows 11 x64 专业预览版 23590.1000这个都没有的话,根本没有资格往下看哟,(手动狗头)。
IDEMicrosoft Visual Studio 2022 17.5.33414.496https://visualstudio.microsoft.com/zh-hans/vs/
CMake3.27.8https://cmake.org/download/

PS:环境差不多就可以了,没必要完全一样哟~

2.2 前期准备

2.2.1 安装Visual Studio 2022

这个不多说了,选择套件的时候只需要选择==使用C++的桌面开发就可以了,其他的不需要,我是因为工作需要,所以才装了这么多。如下图所示:
VS2022套件选择示意图第二个注意点就是在
工作负荷右边的语言包中要将英语==装上,后面需要将VS2022设置为英文。安装完成后打开VS2022,依次点击工具—>选项—>环境—>区域设置,更改语言为English即可,如下图所示:
将VS2022改为英语

2.2.2 安装CMake

值得注意的点如下:

  • 在同意协议后的页面中选择Add CMake to the system PATH for all users选项;
  • 在选择安装路径的时候可以改到需要的路径下,C盘容量2T的可忽略。

注意上面两点,其他的就下一步下一步,傻瓜式安装就可以了。

2.2.3 升级PowerShell

因为后面需要使用vcpkg安装第三方库,而vcpkg在低版本的PowerShell中不能运行,所以需要先升级下。首先打开Windows自带的PowerShell,如下图所示:
自带的PowerShell

输入下面的命令进行安装:

winget install --id Microsoft.Powershell --source winget

回车之后就可以安装了,但是我这里没有直接更换,如果你也一样,可以去路径C:\Program Files\PowerShell\7pwsh.exe,双击打开就可以了,后面就可以直接在PowerShell中打开了,如下图所示:
在本地的终端打开PowerShell 7.4.0

安装PowerShell到此为止。

PS:以防万一,可以使用***$PSVersionTable***命令查看当前的PowerShell版本。

2.2.4 下载libyang库

首先找到一个保存自己喜欢的文件路径,也可以是根目录,但一定要记住这个路径,后面要用,下文简称为libyang文件目录。然后在cmd中通过cd命令切换到libyang文件目录中,最后执行下面的命令:

git clone https://github.com/CESNET/libyang.git

21分钟又过去咯,哈哈哈,clone完成后如下图所示:
下载libyang源码到本地

PS:觉得慢?自行百度查看解决办法,我是懒得找,慢就慢吧,无所吊谓~

2.2.5 安装vcpkg

首先在命令行中cd到自己想要保存vcpkg的路径下,要记住这个路径哟,后面会用,下文简称vcpkg路径,然后执行下面的git(需要安装Git客户端哟)命令,将vcpkg克隆到本地。

git clone https://github.com/Microsoft/vcpkg.git

挺慢的,我这里下载了得有13分钟,中途还云顶之弈下了把棋,哈哈哈。执行结果如下图所示:

下载vcpkg到本地

上面的命令执行完成后,还需要下载一个vcpkg.exe下来,依次执行如下命令:

dir
cd .\vcpkg\
.\bootstrap-vcpkg.bat

结果如下图所示:

下载vcpkg.exe

现在如果使用命令dir查看当前目录下的所有文件就能看到有一个==vcpkg.exe==的文件啦,安装vcpkg到此结束,主要是网速慢了点,其他都没啥。

2.2.6 安装编译所需的依赖库

打开刚刚安装的PowerShell 7.4.0,输入下面的命令:

.\vcpkg.exe install --triplet=x64-windows pcre2 pthreads dirent dlfcn-win32 cmocka getopt

上述命令中我下载的是x64版本的依赖库,如果需要下载x86的,请将x64-windows改为x86-windows即可,我的建议是不要改!命令执行时如下图所示:

安装第三方依赖库前

安装结束的图如下所示:
安装第三方依赖库后

太多了,中间就不截图了。

至此,所有的准备工作都已完成,可以偷着乐了,因为这代表你已经完成了80%的工作了!呼~下面开始编译吧!

3. 在Windows下编译libyang

用文件资源管理器打开libyang文件目录,在根目录下创建==build文件夹和target==两个文件夹。再打开cmd,cd到libyang文件目录下,根据命令解释更改下面命令中的参数,然后再执行。

cmake -S 'D:\Source\libyang' -B 'D:\Source\libyang\build' -G 'Visual Studio 17 2022' -DCMAKE_BUILD_TYPE=Release -DVCPKG_TARGET_TRIPLET=x64-windows -DCMAKE_TOOLCHAIN_FILE=D:\Source\vcpkg\scripts\buildsystems\vcpkg.cmake -DENABLE_TESTS=ON -DCMAKE_INSTALL_PREFIX:PATH=D:\Source\libyang\target

命令解释如下:

  • -S:后面的参数为源码路径,这里更改为你的libyang文件目录的根目录,引号别忘记了哟
  • -B:后面的参数为构建路径,这里需要更改为你刚刚创建的build文件夹的路径,引号别忘记了哟
  • -G:后面是编译器(IDE)的版本号,这里直接使用Visual Studio 17 2022,其实就是前面装的Visual Studio 2022,其他版本的我没试过,爱捣鼓的可以试试
  • -DCMAKE_BUILD_TYPE:看参数也知道啦,就是你生成调试版还是发布版啦,实践证明,用Release就好,反正后面也可以生成Debug版的,无所谓啦;
  • -DVCPKG_TARGET_TRIPLET:看参数也知道啦,这是确定计算机架构咯,一个是x64-windows,一个是x86-windows,后者我试过,没成功,各种各样的错误,搞得身为小垃圾的我很懵逼,所以就用x64-windows吧,别瞎捣鼓了;
  • -DCMAKE_TOOLCHAIN_FILE: 这个就是vcpkg路径,前面的D:\Source可能不一样,后面的保持一致即可;
  • -DENABLE_TESTS:是否开始单元测试,个人的猜测,不知道对不对嗷;
  • -DCMAKE_INSTALL_PREFIX:PATH:就是最后会生成的include文件夹、lib文件夹、dll文件夹和其他不知用处的文件的存放路径。

执行结果如下图所示:
CMake后
不用去管什么not found,只要没有红字就完事了,此时回到文件资源管理器,在==…\libyang\build文件夹中就能看到一个名叫libyang.sln==的文件了,如下图所示:

libyang.sln文件示意图

用VS2022打开上图红框中的文件,在VS2022的解决方案管理器中应该有很多子项目,先不管,先看到第一个名叫ALL_BUILD的子项目,右键此项目的项目名,选择build,如下图所示,现在要做的就是等待编译完成。
ALL_BUILD子项目编译前示意图
最终编译结果如下图所示,可以看到最后倒数第二行显示没有失败的编译项,实话实说,这代码的warning可真多啊!
Debug版编译后
PS:细心的朋友已经发现了,这里是Debug版的,想要编译Release版的,切换下就可以了,不需要做其他的修改。
最后一步就是单独编译子项目==INSTALL,这一步就是帮你将lib、dll、头文件啥的打包到上面创建的target==文件夹中,最终你能在target文件夹中看到如下图所示的结果:
target文件夹示意图

TIPS:要想二次开发,得去研究研究子项目yanglint、yangre,这俩是开发者写的命令行程序,可以自行打个断点去调试调试,我也刚刚才开始研究这玩意儿。有需要的可以一起交流交流呀,哈哈哈。

4. 参考资料

  • [libyang的官方文档] https://netopeer.liberouter.org/doc/libyang/master/html/index.html
  • [yanglint的使用手册] …\libyang\tools\lint\examples(自己电脑上的libyang文件目录)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g_pSeven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值