Open Clemapfel opened 7 months ago
Compiler error that necessitated the change:
/// `Action` is a complex C++ class in another library that I'm trying to wrap for Julia
auto action = module.add_type(Action)
.constructor([](const std::string& id, void* app_ptr){
return new Action(id, *((Application*) app_ptr));
}, true); // use boolean
FAILED: libmousetrap_julia_binding.so.0.3.0.p/cpp_action.cpp.o
ccache c++ -Ilibmousetrap_julia_binding.so.0.3.0.p -I. -I.. -I../cpp -I/home/clem/Applications/julia-1.9.3/julia-1.9.3/include/julia -I/usr/local/include -I/usr/local/include/include/mousetrap -I/usr/include/libadwaita-1 -I/usr/include/gtk-4.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/sysprof-4 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/libxml2 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/graphene-1.0 -I/usr/lib64/graphene-1.0/include -I/usr/include/gio-unix-2.0 -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -std=c++17 -O0 -g -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable -fPIC -mfpmath=sse -msse -msse2 -pthread -DJULIA_ENABLE_THREADING -mfpmath=sse -msse -msse2 -MD -MQ libmousetrap_julia_binding.so.0.3.0.p/cpp_action.cpp.o -MF libmousetrap_julia_binding.so.0.3.0.p/cpp_action.cpp.o.d -o libmousetrap_julia_binding.so.0.3.0.p/cpp_action.cpp.o -c ../cpp/action.cpp
In file included from /usr/local/include/jlcxx/module.hpp:14,
from /usr/local/include/jlcxx/jlcxx.hpp:15,
from ../cpp/../mousetrap_julia_binding.hpp:7,
from ../cpp/action.cpp:1:
/usr/local/include/jlcxx/attr.hpp: In instantiation of ‘void jlcxx::detail::parse_attributes_helper(ExtraFunctionData&, T) [with T = bool]’:
/usr/local/include/jlcxx/attr.hpp:156:29: required from ‘jlcxx::detail::ExtraFunctionData jlcxx::detail::parse_attributes(Extra ...) [with bool AllowCallingPolicy = false; bool AllowFinalizePolicy = true; Extra = {bool}]’
/usr/local/include/jlcxx/module.hpp:625:79: required from ‘void jlcxx::Module::constructor(jl_datatype_t*, LambdaT&&, R (LambdaT::*)(ArgsT ...) const, Extra ...) [with T = mousetrap::Action; R = mousetrap::Action*; LambdaT = implement_action(jlcxx::Module&)::<lambda(const std::string&, void*)>; ArgsT = {const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, void*}; Extra = {bool}; jl_datatype_t = _jl_datatype_t]’
/usr/local/include/jlcxx/module.hpp:1076:28: required from ‘jlcxx::TypeWrapper<T>& jlcxx::TypeWrapper<T>::constructor(LambdaT&&, Extra ...) [with LambdaT = implement_action(jlcxx::Module&)::<lambda(const std::string&, void*)>; Extra = {bool}; typename std::enable_if<jlcxx::detail::has_call_operator<LambdaT>::value, bool>::type <anonymous> = true; T = mousetrap::Action]’
../cpp/action.cpp:8:17: required from here
/usr/local/include/jlcxx/attr.hpp:139:31: error: incomplete type ‘jlcxx::detail::process_attribute<bool, void>’ used in nested name specifier
139 | process_attribute<T>::init(std::forward<T_>(argi), f);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
The same code as:
auto action = module.add_type(Action)
.constructor([](const std::string& id, void* app_ptr){
return new Action(id, *((Application*) app_ptr));
}, jlcxx::finalize_policy::yes); // use policy
compiles fine, meaning the change from boolean was a breaking change for my project
Is this using the master branch of CxxWrap? libcxxwrap_julia
0.12 needs CxxWrap 0.15, which is currently unreleased but installable via CxxWrap#main
or CxxWrap#testjll
.
I had to recompile and refactor my project because the argument for
constructor
was changed to require a finalizer policy instead of a boolean. I replaced everytrue
withjlcxx::finalize_policy::yes
, otherwise it would fail to compile, see below for the compiler error.After recompiling the project, it now crashes without an error message on exit:
The stacktrace doesn't point to any line of my own code, as far as I can see, how would I go about finding out how to fix this?