zig-course icon indicating copy to clipboard operation
zig-course copied to clipboard

增加直接将 C 库作为依赖引入的教程

Open jinzhongjia opened this issue 1 year ago • 6 comments

注意:此处指的是无需目标C库包含 build.zig

jinzhongjia avatar May 02 '24 13:05 jinzhongjia

https://github.com/zigcc/zig-course/pull/107 并向 vcpkg删除部分添加url指引,索引到添加的教程

jinzhongjia avatar May 02 '24 13:05 jinzhongjia

并向 vcpkg删除部分添加url指引,索引到添加的教程

这里最好加个教程,说明如何用 zon 下载 vcpkg 的依赖,怎么配置 include path 之类的

jiacai2050 avatar May 06 '24 02:05 jiacai2050

vcpkg是直接下载编译成lib库,按正常导入lib的方法不就可以了吗?

exe.linkLibC();
exe.addIncludePath(.{ .cwd_relative = vcpkg_include_path });
exe.addLibraryPath(.{ .cwd_relative = vcpkg_library_path });
exe.linkSystemLibrary("vcpkg_lib_name");

下载依赖什么的vcpkg自己就做好了,zig部分只用include 和 link就够了吧

ginghalo avatar Jul 04 '24 07:07 ginghalo

下载依赖什么的vcpkg自己就做好了,zig部分只用include 和 link就够了吧

如果 vcpkg 自己下载,zig 这边怎么获取下载的路径呢?是有什么规则嘛?

jiacai2050 avatar Jul 04 '24 08:07 jiacai2050

vcpkg

比如在windows-x64下把vcpkg安装在"D:\vcpkg" 那安装运算库"gsl"时就需要

D:\vcpkg\vcpkg.exe install gsl:windows-x64

vcpkg自己会下载编译,然后用指令

D:\vcpkg\vcpkg.exe integrate install

将库放在一起方便导入

而以上是经典的vcpkg安装库的方法,一般到这一步之后在vs直接include就够了

zig

这时候要切入的点就是vcpkg将库放在一起的地方,一般是在vcpkg目录下的"installed"目录下,按照上面的例子,在安装库之后可以在"D:\vcpkg\installed\windows-x64"看到"bin"、"include"、"lib"目录。

  • "bin"放着的是"x.dll"文件,用做动态库
  • "include"放着的是"x.h"头文件
  • "lib"放的是"x.lib"用于链接

那么之后就普通地导入c库就行了,就像我之前写的

// build.zig
exe.linkLibC();
exe.addIncludePath(.{ .cwd_relative = "D:\\vcpkg\\installed\\windows-x64\\include"});
exe.addLibraryPath(.{ .cwd_relative = "D:\\vcpkg\\installed\\windows-x64\\lib" });
exe.linkSystemLibrary("gsl");
// main.zig
const gsl = @cImport({
    @cInclude("gsl/gsl_fft_complex.h");
});

ginghalo avatar Jul 04 '24 08:07 ginghalo

那就是说,知道 vcpkg 的 root dir 和当前系统架构后,就可以拼出我们需要的 path 了?

如果感兴趣,可以帮我们加上这个示例。

jiacai2050 avatar Jul 04 '24 09:07 jiacai2050