Hello,
I compiled ecl16.0.0 with option "--with-cxx".
Then I use ffi:defcallback function like
(ffi:defcallback yyyy :void () ..... )
then compile-file (compile-file "xxxxx.lisp" :c-file "xxxxx.cpp" :system-p t)
I received error message as follows (freebsd10.1 clang++) xxxxx.cpp:162:8: error: no matching function for call to 'ecl_make_foreign_data' T0 = ecl_make_foreign_data(ECL_SYM("POINTER-VOID",1381),0,ecl_callback_0)
I try as follows
in src/cmp/cmpcbk.lsp & src/new-cmp/cmpc-cbk.lsp line 44 from: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,~a)" c-name) to: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,(void*)~a)" c-name)
after that, I did not receive error message and ffi:callback work fine.
Would you let me know what your thoughts are on this matter.
hirohiro447
Hey,
thanks for the report!
Inlining is somewhat broken. Direct casting of a function into (void*) is undefined behavior in C afaik but that's what we'll do.
Please consult this issue: https://gitlab.com/embeddable-common-lisp/ecl/issues/167
hiro hiro writes:
Hello,
I compiled ecl16.0.0 with option "--with-cxx".
Then I use ffi:defcallback function like
(ffi:defcallback yyyy :void () ..... )
then compile-file (compile-file "xxxxx.lisp" :c-file "xxxxx.cpp" :system-p t)
I received error message as follows (freebsd10.1 clang++) xxxxx.cpp:162:8: error: no matching function for call to 'ecl_make_foreign_data' T0 = ecl_make_foreign_data(ECL_SYM("POINTER-VOID",1381),0,ecl_callback_0)
I try as follows
in src/cmp/cmpcbk.lsp & src/new-cmp/cmpc-cbk.lsp line 44 from: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,~a)" c-name) to: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,(void*)~a)"
c-name)
I've added main part of your mail to the abovementioned issue. I won't incorporate this fix directly because I remember I did similar stuff //casting to (void*)obj, or even casting to (void**)&obj// at my last attempt when working on this issue but it was breaking arm builds. When I'll confirm it doesn't break a builds I'll add it along with other changes and the appropriate patch to CFFI.
after that, I did not receive error message and ffi:callback work fine.
Would you let me know what your thoughts are on this matter.
Generally use CFFI's defcallback. It does just that but without inlining (I've disabled inlining to make things working and left issue opened to work on it when I'll find time/incentive to do it).
hirohiro447
As a sidenote, according to Juan (I've asked him about the newcmp) newcmp was a failed experiment and it doesn't build anyway. src/cmp/* changes were enough. I'll remove the `new-cmp' directory before the next release to avoid unnecessary confusing of people approaching the codebase.
Once again - thanks for the report :-)
Best regards, Daniel
I'll remove the `new-cmp' directory before the next release to avoid unnecessary confusing of people approaching the codebase.
random suggestion: leave it behind in a separate branch with an appropriate name.
On Fri, 13 Nov 2015 12:30:34 +0100 Attila Lendvai attila@lendvai.name wrote:
I'll remove the `new-cmp' directory before the next release to avoid unnecessary confusing of people approaching the codebase.
random suggestion: leave it behind in a separate branch with an appropriate name.
Unfortunate, about the new-cmp code.
I concur with the suggestion;
I think that this could eventually also apply to other things like the old gc code...
Hello,
Thank you for your reply.
Now I am trying direct access wxWidgets GUI library with c-inline. If CFFI is possible to access C++ library, I will use CFFI.
Best regards, hirohiro
2015-11-13 19:12 GMT+09:00 Daniel Kochmański daniel@turtleware.eu:
Hey,
thanks for the report!
Inlining is somewhat broken. Direct casting of a function into (void*) is undefined behavior in C afaik but that's what we'll do.
Please consult this issue: https://gitlab.com/embeddable-common-lisp/ecl/issues/167
hiro hiro writes:
Hello,
I compiled ecl16.0.0 with option "--with-cxx".
Then I use ffi:defcallback function like
(ffi:defcallback yyyy :void () ..... )
then compile-file (compile-file "xxxxx.lisp" :c-file "xxxxx.cpp" :system-p t)
I received error message as follows (freebsd10.1 clang++) xxxxx.cpp:162:8: error: no matching function for call to 'ecl_make_foreign_data' T0 = ecl_make_foreign_data(ECL_SYM("POINTER-VOID",1381),0,ecl_callback_0)
I try as follows
in src/cmp/cmpcbk.lsp & src/new-cmp/cmpc-cbk.lsp line 44 from: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,~a)" c-name) to: ,(format nil "ecl_make_foreign_data(@':pointer-void,0,(void*)~a)"
c-name)
I've added main part of your mail to the abovementioned issue. I won't incorporate this fix directly because I remember I did similar stuff //casting to (void*)obj, or even casting to (void**)&obj// at my last attempt when working on this issue but it was breaking arm builds. When I'll confirm it doesn't break a builds I'll add it along with other changes and the appropriate patch to CFFI.
after that, I did not receive error message and ffi:callback work fine.
Would you let me know what your thoughts are on this matter.
Generally use CFFI's defcallback. It does just that but without inlining (I've disabled inlining to make things working and left issue opened to work on it when I'll find time/incentive to do it).
hirohiro447
As a sidenote, according to Juan (I've asked him about the newcmp) newcmp was a failed experiment and it doesn't build anyway. src/cmp/* changes were enough. I'll remove the `new-cmp' directory before the next release to avoid unnecessary confusing of people approaching the codebase.
Once again - thanks for the report :-)
Best regards, Daniel
-- Daniel Kochmański ;; aka jackdaniel | Poznań, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu
"Be the change that you wish to see in the world." - Mahatma Gandhi