2026a

# 常见问题解答(FAQ)


# 代码生成副产物的后缀名

文档中,代码生成的副产物 libsyslabcrt-io.a, libsyslabcrt-dylib.a 的后缀可能随着编译器环境而发生变化。如果使用 MSVC 编译器或 Zig 编译器,则会生成 .lib 后缀的文件。

# 在 Windows 上,通过 g++/gcc 编译的动态库无法脱离 Syslab 环境调用

在 Windows 操作系统上,使用 scc 命令生成动态库后,可能出现在 Syslab 中可以运行、而在 Syslab 外不能运行的问题。

此问题是常见的 C++ 运行时问题。由于生成 C++ 的代码使用 MinGW 环境下的 g++/gcc 编译,因此依赖了以下由 MinGW 提供的运行时库:

  1. libstdc++-N.dllN 常见为 6
  2. libgcc_s_seh-N.dllN 常见为 1
  3. libwinpthread-N.dllN 常见为 1
  4. libgcc_s_sjlj-N.dll, N 常见为 1 (低版本 GCC 时可能需要)

当用户本地机器已配置 MinGW 环境,则 scc 调用了用户 MinGW 环境,此时,用户需复制相应 MinGW 环境下的四个运行时库到lib/文件夹下,程序即可运行;如果用户本地机器并未配置 MinGW 环境,指定 --bundle 选项的 scc 尝试寻找合适的编译环境,生成自包含的二进制输出,无需用户自行处理。

此外,当编译目标是可执行文件时,解决方案最为简单:可以使用 scc--static-mingw 选项,将以上运行时库进行静态链接,而无需拷贝文件。

注意事项

当用户在 Windows 上生成动态库时,也可以使用 --static-mingw 选项,但此操作不享受 GCC Runtime Library Exception 的友好商用协议。