бинарь? С одним dylib все работает, с другим падает
Ну, как и всё в расте: #[repr(C)] struct CBoxI32(*mut i32); #[no_mangle] extern "C" fn boox() -> CBoxI32 { CBox(Box::into_raw(Box::new(1_i32))) } А в бинаре делаешь Box::from_raw(). Только надо удостовериться, что аллокаторы совпадают.
Box и так FFI-compatible же
Не, там же нет repr(C) или repr(transparent). Точнее transparent там есть, но он неявный, а потому не FFI-comp.
Ну тогда единственная проблема, которая мне на ум приходит, это проблема с другими типами или с генериками, потому что глобальный аллокатор вроде бы не зависит от того, с какой версией раста компилировались либы и бинарники.
Это лишнее, у Box стабильный ffi, а вот с аллокаторами как раз проблема
Обсуждают сегодня