Я хочу вызвать функцию c ++ из SBCL, используя cffi. Я попытался вызвать следующую очень простую функцию.
#include <stdio.h>
void print1() {
printf("Hello World!");
}
Я сделал .so файл от gcc.
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 бит).
У кого-нибудь есть подсказка для этой проблемы ??
Задача ещё не решена.
Других решений пока нет …