2

我想使用 cffi 从 SBCL 调用 c++ 函数。我尝试调用以下非常简单的函数。

#include <stdio.h>

void print1() {
printf("Hello World!");
}

我通过 gcc 制作了 .so 文件。

gcc -Wall -fpic -shared "c:/Users/***/Documents/tmp/test.c" -o "c:/Users/***/f_libraries/libtest.so" -m64`

该文件的创建如下: C:/Users/***/f_libraries/libtest.so: PE32+ executable (DLL) (console) x86-64, for MS Windows

我可以从 sbcl 读取这个文件,但是当我调用“print1”函数时,我收到以下错误消息。

当我第一次打电话时,我得到了

* (cffi:foreign-funcall "print1" :void)

debugger invoked on a SB-SYS:MEMORY-FAULT-ERROR in thread
#<THREAD "main thread" RUNNING {1002DBA553}>:
  Unhandled memory fault at #x28.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

debugger invoked on a SB-SYS:MEMORY-FAULT-ERROR in thread
#<THREAD "main thread" RUNNING {1002DBA553}>:
  Unhandled memory fault at #xFFFFFFFFFFFFFFFF.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-DEBUG::DEBUG-LOOP-FUN)
0] backtrace

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002DBA553}>
0: (SB-DEBUG::DEBUG-LOOP-FUN)
1: (INTERNAL-DEBUG)
2: (SB-DEBUG::%INVOKE-DEBUGGER #<SB-SYS:MEMORY-FAULT-ERROR {1006390E03}>)
3: ((LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX))
4: (SB-IMPL::CALL-WITH-SANE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {10063910CB}>)
5: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET #:THUNK :IN SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX) {2281EB}>)
6: (SB-DEBUG::FUNCALL-WITH-DEBUG-IO-SYNTAX #<FUNCTION SB-DEBUG::%INVOKE-DEBUGGER> #<SB-SYS:MEMORY-FAULT-ERROR {1006390E03}>)
7: (INVOKE-DEBUGGER #<SB-SYS:MEMORY-FAULT-ERROR {1006390E03}>)
8: (ERROR SB-SYS:MEMORY-FAULT-ERROR :ADDRESS 18446744073709551615)
9: (SB-KERNEL:HANDLE-WIN32-EXCEPTION #.(SB-SYS:INT-SAP #X002284F0) #.(SB-SYS:INT-SAP #X00229220))
10: ("foreign function: #x4338BC")

0] 0
;
; compilation unit aborted
;   caught 1 fatal ERROR condition

第二次之后,

* (cffi:foreign-funcall "print1" :void)

debugger invoked on a SB-SYS:MEMORY-FAULT-ERROR in thread
#<THREAD "main thread" RUNNING {1002DBA553}>:
  Unhandled memory fault at #xFFFFFFFFFFFFFFFF.

Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL:HANDLE-WIN32-EXCEPTION #.(SB-SYS:INT-SAP #X0022B3A0) #.(SB-SYS:INT-SAP #X0022C0D0))
0] backtrace

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1002DBA553}>
0: (SB-KERNEL:HANDLE-WIN32-EXCEPTION #.(SB-SYS:INT-SAP #X0022B3A0) #.(SB-SYS:INT-SAP #X0022C0D0))
1: ("foreign function: #x4338BC")

0] 0
;
; compilation unit aborted
;   caught 1 fatal ERROR condition

我的电脑是 Windows 7(64 位)。有没有人有这个问题的线索?

4

0 回答 0