picodata / tarantool-module

Tarantool Rust SDK

Home Page:https://docs.rs/tarantool/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Не подгружается хранимая процедура на Rust из примера в Docker

cleverid opened this issue · comments

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'
...

Подскажите в чем может быть причина? Спасибо!

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
    #![allow(dead_code)]
    
    Без него, по-видимому, функции easy, easy2 оптимизировались при сборке и не попадали в .so файл, поэтому tarantool их не находил. Эта часть, кстати, не описана в примерах библиотеки!

Итоговый рабочий код можно посмотреть тут - https://github.com/cleverid/tarantool_rust_test/tree/problem_answer