如何在Zig 0.10.1的zig.build文件中指定-rdynamic选项?
Zig 0.10.1通过build.zig构建Wasm库时无法导出符号的问题
- 使用Zig 0.10.1构建Wasm库,此前用
zig build-lib工具时,添加-rdynamic选项可正常导出符号,但改用build.zig构建时,找不到传递该选项的方式,导致add()函数未被导出。 - 尝试执行
zig build -rdynamic,工具提示不识别该选项,查看zig build -h也未发现相关配置项。 - 想查看
std.build.Builder的源码寻找解决方案,访问zig 0.10.x分支的lib/std/build目录,却找不到Builder.zig文件,怀疑路径有误。
我的build.zig文件
const Builder = @import("std").build.Builder; const logger = @import("std").log; const std = @import("std"); pub fn build(b: *Builder) !void { // Standard target options allows the person running `zig build` to choose // what target to build for. Here we do not override the defaults, which // means any target is allowed, and the default is native. Other options // for restricting supported target set are available. const target = b.standardTargetOptions(.{}); // Standard optimization options allow the person running `zig build` to select // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not // set a preferred release mode, allowing the user to decide how to optimize. const optimize = b.standardOptimizeOption(.{}); const lib = b.addSharedLibrary(.{ .name = "math", .root_source_file = .{ .path = "math.zig" }, .target = target, .optimize = optimize, }); b.installArtifact(lib); }
我的math.zig文件
extern "env" fn print(i32) void; export fn add(a: i32, b: i32) void { print(a + b); }
将生成的wasm文件导入WebAssembly Code Explorer检查,确认add()函数未被导出。
内容的提问来源于stack exchange,提问作者Gregor Budweiser
相关产品推荐
相关产品推荐

