Название: Как корректно собрать dll под cygwin-ом? Отправлено: hnorgist от Июнь 07, 2010, 07:20 Файл libsample.c
Код Собираю: Код: $ gcc -shared -o libsample.dll libsample.c Но мне нужно её обернуть в python, а питоновский процесс виснет на открытии этой dll-ки: Код А если эту же библиотеку собрать в Visual Studio, то она нормально оборачивается в python. Дурные мысли на тему: Быть может коряво собираю? Пытаюсь собрать с использованием dlltool (http://opennet.ru/man.shtml?topic=dlltool) по примеру в его же мануале Код: $ gcc -c libsample.c Offtopic: Вопрос вызван тем, что пытаюсь собрать библиотеку libmpq (https://libmpq.org/) на винде и обернуть ее в питон. Стандартным способом ./configure && make && make install не собирается. Точнее собирается, но только статическая библиотека, а на этапе make вылезает: libtool: link: warning: undefined symbols not allowed in i686-pc-cygwin shared libraries. А если пытаюсь собрать вручную(gcc -shared), то питон так же виснет. Название: Re: Как корректно собрать dll под cygwin-ом? Отправлено: kuzulis от Июнь 07, 2010, 08:56 http://www.prog.org.ru/topic_8259_0.html
Название: Re: Как корректно собрать dll под cygwin-ом? Отправлено: hnorgist от Июнь 07, 2010, 09:58 Прочитал, прочитал и упоминаемые 41, 42 главы "Фундамантального труда Шлее" - там только общие знания.
Нужный, насколько я понимаю, абзац в статье: Цитировать 1. Пользуйтесь для сборки библиотеки и приложения одним и тем же компилятором. Разные компиляторы по-разному кодируют в объектном коде имена функций, классов и т.д. Более того, могут отличаться и смещения полей внутри класса. По этому попытка подключить dll, собранный в другом компиляторе, скорее всего, увенчается успехом лишь в том случае, если все ф-ции отмечены как extern "C" и смещения структур выравнены принудительно. Для классов это, разумеется, не подходит. Как ни трудно понять, при самостоятельной разработке библиотеки эта проблема вряд ли возникнет. А вот если мы имеем чужой dll и закрытый код... Тем, кто попал в такую ситуацию, остается только посочувствовать. Действительно, проверил пример не на виндовском на сигвиновском питоне - работает. Но все-таки хотелось бы уточнить: то есть нет простого варианта заставить работать сигвиновские/mingw-шные библиотеки? А есть тяжелый вариант? Хотелось бы получше понять природу проблемы и заставить работать хоть простейшую библиотеку(подправить пару смещений?). Я так понимаю тут проблема уже на этапе загрузки библиотеки, а это мне не понятно - неужели нет универсальной точки входа и кода загрузки библиотеки? Пусть бы на этапе вызова функций возвращалось непонятно что.. Название: Re: Как корректно собрать dll под cygwin-ом? Отправлено: MoPDoBoPoT от Июнь 07, 2010, 11:48 Вся загвоздка в декорировании имен (name decoration) и в соглашении вызова функций (calling convention). Для полноты картины ознакомся с "Написание и использование DLL в различных средах (http://www.progz.ru/forum/index.php?showforum=89)".
Название: Re: Как корректно собрать dll под cygwin-ом? Отправлено: hnorgist от Июнь 08, 2010, 00:49 Спасибо, то что надо
|