четверг, 8 ноября 2007 г.

Опыты со SWIG'ом: std::string и Ruby

Решил попробовать изменить пример из предыдущего поста: вместо double использовать std::string. swig предоставляет кучу уже готовых typemaps, в том числе для stl. Теперь файл type.i получился таким:

Пересобрал экстеншн и запустил такой тест:

И... при загрузке расширения вылезла ошибка: LoadError: /usr/lib/ruby/site_ruby/1.8/i586-linux/test.so: undefined symbol: _ZNSs4_Rep20_S_empty_rep_storageE — /usr/lib/ruby/site_ruby/1.8/i586-linux/test.so.

Оказалось, что вся проблема в Makefile: по умолчанию компилятор указывается gcc. Что бы исправить это, добавил в скрипт, генерящий Makefile, одну строчку:

Теперь std::string успешно конвертится в ruby-строки и наобород.

Комментариев нет: