Size: a a a

2020 April 27

AZ

Alex Zhukovsky in rust_offtopic
polunin.ai
cdylib если нужно вызывать Раст код из других языков
repr(C) только для этого и нужен
источник

p

polunin.ai in rust_offtopic
Кароч спор ни о чем, официальной информации нет, руководствуемся размытыми фразами
источник

MB

Mikail Bagishov in rust_offtopic
Emmanuel Goldstein
Я имею право это делать или всё сломается?
Я бы спросил в unsafe-code-guidelines. Выглядит довольно серой зоной.
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Кстати, интересно.
Представим себе, что я сделал dylib с двумя функциями:
fn call(struct: MyComplexStructure) {
   ...
}

extern "C" fn call_serialized(struct: *const u8, len: usize) {
   let struct: MyComplexStructure = serde_very_fast::deserialize_from_c_array(struct, len);
   call(struct)
}
Я подключил библиотеку, выяснил, что версия ABI не совпадает, и вызываю только функцию call_serialized().
А как ты выяснишь версию аби
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
А как ты выяснишь версию аби
Например, методом сравнения версии компилятора, платформы и прочей метаинформации
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Например, методом сравнения версии компилятора, платформы и прочей метаинформации
В сошках эта информация пишется?
источник

EG

Emmanuel Goldstein in rust_offtopic
Я могу её сам записать, лол
источник

p

polunin.ai in rust_offtopic
тогда тебе точно нужно знать от чего зависит abi
источник

p

polunin.ai in rust_offtopic
если найдешь эту информацию кинь сюда
источник

MB

Mikail Bagishov in rust_offtopic
polunin.ai
тогда тебе точно нужно знать от чего зависит abi
Можно записать версию в конец .so-файла.
источник

p

polunin.ai in rust_offtopic
Mikail Bagishov
Можно записать версию в конец .so-файла.
источник

MB

Mikail Bagishov in rust_offtopic
Нет, почему?
источник

r

red75prime in rust_offtopic
Использовать консервативный подход: писать версию компилятора, тогда ABI точно будет совпадать. Точнее сборку компилятора
источник

MB

Mikail Bagishov in rust_offtopic
Если я к ELF-файлу припишу что-то в конец, он останется корректным.
источник

p

polunin.ai in rust_offtopic
red75prime
Использовать консервативный подход: писать версию компилятора, тогда ABI точно будет совпадать. Точнее сборку компилятора
от таргета зависит или нет?
источник

p

polunin.ai in rust_offtopic
желательно пруф дать
источник

MB

Mikail Bagishov in rust_offtopic
То есть сначала открываем длл-ку, читаем с конца версию, проверяем. Если совпала, то ОК и делаем dlopen
источник

EG

Emmanuel Goldstein in rust_offtopic
Mikail Bagishov
То есть сначала открываем длл-ку, читаем с конца версию, проверяем. Если совпала, то ОК и делаем dlopen
Мы, кажется, имеем право сделать dlopen, даже если дллка скомпилирована с другой версией ABI
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Мы, кажется, имеем право сделать dlopen, даже если дллка скомпилирована с другой версией ABI
да
источник

EG

Emmanuel Goldstein in rust_offtopic
И имеем право прочитать оттуда extern "C" константу
источник