如何解决在 Racket 中有依赖关系的 FFI?
我为 Wiring PI 库开发了一个非常简单的 FFI,以便能够使用 Racket 控制 Raspberry Pi。
这运行良好,但仅涵盖基本功能。我想扩展它以使用 libwiringPiDev.so 中的 lcd.h,以便我可以创建 FFI 来控制 LCD。
通常情况下,编译使用 LCD 的 C 文件时,编译时会同时标记标准库和开发库:
.items{
background-image: IMAGE_LINK
}
在我的 LCD FFI 中,我执行了以下操作:
-lwiringPi -lwiringPiDev
但是,当我尝试要求该球拍文件时,我遇到了:
(define-ffi-definer define-lcd
(ffi-lib "usr/lib/libwiringPiDev.so"))
digitalRead 函数存在于基础库中,但不存在于开发库中……我该如何做一个“具有依赖关系的 FFI”,以便 Racket 能够正确管理这两个库,以便能够找到必要的符号?
解决方法
尝试先在全局模式下加载 libwiringPi.so,然后加载 libwiringPiDev.so:
(define-ffi-definer define-lcd
(ffi-lib "/usr/lib/libwiringPi.so" #:global? #t))
(define-ffi-definer define-lcd-dev
(ffi-lib "/usr/lib/libwiringPiDev.so"))
#:global? #t
参数对应于在对 RTLD_GLOBAL
的调用中设置 dlopen
标志,dlopen 的手册页(在我的 Linux 系统上)说
RTLD_GLOBAL
此共享对象定义的符号将可用
用于后续加载的共享对象的符号解析。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。