You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Clang编译的共享DLL缺失sql.c中的duckffi_*符号问题

问题分析

你编译的DLL里没导出sql.c中的duckffi_*符号,核心原因是Windows平台下Clang默认不会自动导出共享库的函数符号,只有显式标记的符号才会被放进DLL的符号表。

解决方法

1. 显式标记要导出的符号

方法一:修改源码

直接在sql.c里所有duckffi_*函数的声明前加__declspec(dllexport),比如:

__declspec(dllexport) void duckffi_execute_sql() {
    // 函数实现
}

方法二:用.def文件(不用改源码)

新建一个duckdb_exports.def文件,把要导出的函数列进去:

EXPORTS
    duckffi_connect
    duckffi_execute_sql
    duckffi_disconnect
    // 把所有需要导出的duckffi_*函数都列在这里

然后编译时把这个.def文件加到命令里:

clang src/sql.c -O3 -shared -o bin/libduckdb.dll -I"C:\projects\deno-duckdb-master\include" -L"C:\projects\deno-duckdb-master\bin" -lduckdb duckdb_exports.def

2. 调整编译命令顺序(避坑)

Windows下用Clang编译时,把依赖库(-lduckdb)放在源文件后面,能避免一些链接异常,上面的命令已经调整过顺序了。

3. 验证结果

重新编译完,用Dependencies工具看libduckdb.dll,应该能在导出表看到duckffi_*符号,这时再用Deno.dlopen加载就能找到对应的符号了。

内容的提问来源于stack exchange,提问作者localhost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:57:02