FFI依赖于Racket?

飞轮

我为Wiring PI库开发了一个非常简单的FFI,以便能够使用Racket控制Raspberry Pi。

这很好用,但仅涵盖基本功能。我想将其扩展为也使用libwiringPiDev.so中的lcd.h,以便我可以创建一个FFI来控制LCD。

通常,当编译使用LCD的C文件时,在编译时会同时标记标准库和开发库:

-lwiringPi -lwiringPiDev

在我的LCD FFI中,我执行了以下操作:

(define-ffi-definer define-lcd
  (ffi-lib "usr/lib/libwiringPiDev.so"))

但是,当我尝试使用该球拍文件时,我遇到了:

; ffi-lib: couldn't open "/usr/lib/libwiringPiDev.so"
;   (/usr/lib/libwiringPiDev.so: undefined symbol: digitalRead) [,bt for
;   context]

digitalRead函数存在于基础库中,但不存在于开发库中...我该如何做“具有依赖项的FFI”,以便Racket可以正确地管理两个库以找到必要的符号?

瑞安·库珀珀(Ryan Culpepper)

尝试先在全局模式下加载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
此共享库定义的符号将可用于后续加载的共享库的符号解析。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章