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

Erlang自定义驱动driverc.c编译出现未定义符号错误如何解决?

Erlang驱动编译报错解决方法

1 先修正代码笔误

你提供的C代码存在两处语法错误,需要先修正再编译:

  • control函数定义的第二个参数拼写错误:将insigned int command修改为unsigned int command
  • control函数定义的第五个参数名和声明不一致:将char **buf修改为char **rbuf

2 修正编译命令

你当前使用的编译命令是按照普通可执行C程序的逻辑编写的,不符合Erlang驱动的编译规则,报错原因如下:

  • 未添加动态库编译参数:Erlang驱动属于动态链接库,不需要main函数作为入口,默认编译可执行程序会强制校验main函数,因此会报undefined symbol: main错误
  • 未链接Erlang官方依赖库:driver_alloc、set_port_control_flags属于Erlang驱动运行库的API,ei_encode_long属于Erlang ei编码库的API,编译时未显式链接这两个库就会报符号未定义错误

Linux平台正确编译命令

cc -fPIC -shared driverc.c -I/usr/local/lib/erlang/usr/include -L/usr/local/lib/erlang/usr/lib -lerl_driver -lei -o driverc.so

macOS平台正确编译命令

cc -fPIC -dynamiclib driverc.c -I/usr/local/lib/erlang/usr/include -L/usr/local/lib/erlang/usr/lib -lerl_driver -lei -o driverc.so

参数说明:

  • -fPIC:生成位置无关代码,满足动态链接库的运行要求
  • -shared(Linux)/-dynamiclib(macOS):指定编译器生成动态链接库,而非可执行程序
  • -L:指定Erlang依赖库的搜索路径,请根据你实际的Erlang安装路径调整,若你是通过系统包管理器安装的Erlang,路径通常为/usr/lib/erlang/usr/lib
  • -lerl_driver:链接Erlang驱动运行库
  • -lei:链接Erlang ei编码库
    编译成功后会生成driverc.so文件,你可以在Erlang代码中通过erlang:open_port/2接口加载该驱动使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:05