Не подгружается хранимая процедура на Rust из примера в Docker
cleverid opened this issue · comments
Eugen commented
Здравствуйте!
Пробую подключить вашу библиотеку, но не получается загрузить итоговый .so файл
Собираю в Docker под MacOSx
Исходники:
https://github.com/cleverid/tarantool_rust_test/tree/problem
Запуск
docker-compose up --build
Подключение
docker-compose exec -ti tarantool console
conn = require('net.box').connect(3301)
conn:call('easy')
Ошибка
unix/:/var/run/tarantool/tarantool.sock> conn:call('easy')
---
- error: 'Failed to dynamically load function ''easy'': /tmp/tntQkYqIg/easy.so: undefined
symbol: easy'
...
Подскажите в чем может быть причина? Спасибо!
Eugen commented
Нашел ответ.
Проблема была в двух вещах:
- Заменил rust на сборку из ночной версии
Эта часть мне не понятна, но до этого что-то не хватало при сборке
RUN apt update && \ apt install build-essential curl -y && \ curl https://sh.rustup.rs -sSf | bash -s -- --default-toolchain nightly -y
- Добавил макрос на файл lib.rs
Без него, по-видимому, функции easy, easy2 оптимизировались при сборке и не попадали в .so файл, поэтому tarantool их не находил. Эта часть, кстати, не описана в примерах библиотеки!
#![allow(dead_code)]
Итоговый рабочий код можно посмотреть тут - https://github.com/cleverid/tarantool_rust_test/tree/problem_answer