LINUX.ORG.RU

[mingw][C++][python][SWIG] Кросскомпиляция под мастдай - как бы ее ...?

 , , ,


1

2

Есть некая софтинка C++/Python, надо ее собрать под виндвовс ХР.

Точнее есть интерфейс на питоне + ядро на С++, которое в питон цепляется через SWIG. Сделал минималистичную версию (тупо стер все лишнее, в одном каталоге лежит 3 модуля + оболочка сделанная SWIG-ом для питона и кулек хидеров), надо это собрать видимо в .dll (изнчачально оно собиралось в .so).

Дальше кино - ни один из модулей не собирается:

i586-mingw32msvc-g++ -enable-auto-import -mwindows  -O3 -g  -I/usr/include/python -I/usr/i586-mingw32msvc/include/ -DPYTHON -DPYLIKE_PRINT_R -Wall -c impl.cpp
In file included from /usr/include/python/Python.h:58,
                 from indexD.hpp:9,
                 from arrayTD.hpp:8,
                 from impl.hpp:4,
                 from impl.cpp:1:
/usr/include/python/pyport.h:261:24: error: sys/select.h: Нет такого файла или каталога
In file included from indexD.hpp:17,
                 from arrayTD.hpp:8,
                 from impl.hpp:4,
                 from impl.cpp:1:
mystream.hpp:36: error: expected unqualified-id before ‘)’ token
mystream.hpp:36: error: expected `)' before ‘->’ token
...

Допустим псол. ошибки - ей не нравится метод класса fileno(), это я могу исправить (и вообще этот модуль тоже выкинуть). Но чего делать с sys/select.h и вообще со сборкой модуля для питон из под этой mingw???

Сроки - позавчера, все горит синим планменем... ;-(

★★★★★
Ответ на: комментарий от shty

Заказчику нужно приложение под ХР, что бы оно не требовало инсталляции чего либо. Я не знаю прокатит ли вариант с питоном, или придется py2exe привлекать. cygwin тут сможет помочь?

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

Заказчику нужно приложение под ХР, что бы оно не требовало инсталляции чего либо.

ну приложение то он будет инсталлировать? вместе с ним поставить и окружение - cygwin

типа как pidgin ставится вместе с gtk

shty ★★★★★
()

кстати

i586-mingw32msvc-g++

хмм, может попробовать mingw32-g++.exe + msys?

может прокатить

shty ★★★★★
()
Ответ на: комментарий от shty

Нет, инсталлировать он ничего не будет (там это отдельная песня, надо кучу бумашек писать для инсталляции чего либо... ). Я надеюсь, что он сможет как то поставить питон (если не сможет, не знаю чего делать... py2exe у меня не завелся, руск. язык не понравился).

И там еще актуален вопрос производительности, cygwin не притормаживает?

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

(там это отдельная песня, надо кучу бумашек писать для инсталляции чего либо...

иногда проще написать :)

И там еще актуален вопрос производительности, cygwin не притормаживает?

да по идее не должен сильно, это ж просто обёртка

хотя тут фиг знает как оно написано, применительно к задачам которые выжимают до капли вычислительные мощности могут быть нюансы, надо пробовать

в общем резюмируя, есть 2 пути:
1. попробовать запустить под cygwin
2. попробовать собрать под виндой используя mingw + msys

shty ★★★★★
()

-I/usr/include/python

Ээээээ......
Инклюдятся заголовки линуксового питона? Там же платформо-зависимый конфиг, который, емнип, генерится при сборке, при помощи configure.
Надо взять заголовки виндовой версии, ну или собрать виндовую. И её уже инклюдить.

anonymous
()

Сообщение удалено, я смотрю, но оно мне понравилось.

найти sys/select.h и дать его программе - гениально, я считаю.
А если программа для компиляции требует afxwin.h - найти и дать его ей.
Проблема переносимости виндовых прог на линукс решена =)

anonymous
()
Ответ на: комментарий от anonymous

> Проблема переносимости виндовых прог на линукс решена =)

все верно - только надо еще .so найти ;)

aho
()
Ответ на: комментарий от AIv

cygwin - одна dll-ка, её можно закинуть к программе и вместе с ней переносить.

Если питона на машине нет, тогда либо ставить питон отдельно, либо тащить вместе с программой питоновый интерпретатор.

Т. е. структура будет такой:

proga\
    python\ // здесь интерпретатор
    common\ // собственно, сама программа вместе с cygwin.dll
    run.bat  // запускаем эту штуку, где она прописывает правильный %PATH% и запускает питон с программой

ma1uta ★★★
()
Ответ на: комментарий от shty

> иногда проще написать

Я бы написал... но это решаю увы не я.

попробовать запустить под cygwin

Глянул бегло их доки - чето не понравилось... это правда будет сильно проще, софрмировать все так что б оно взлетало без инсталляции? Я в винде и всех этих библиотечных делах плохо разбираюсь;-(

попробовать собрать под виндой используя mingw + msys

Винды то у меня и нету;-) Есть голая семерка, я на ней потещу когда будет чего. А так - дебиан 6 да сюсе...

AIv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Ээээээ......

Инклюдятся заголовки линуксового питона? Там же платформо-зависимый конфиг, который, емнип, генерится при сборке, при помощи configure.

Надо взять заголовки виндовой версии, ну или собрать виндовую. И её уже инклюдить.

Эта мысль меня посещала;-) Но - где б ее взять? Сырцы - linux/mac only (если верить python.org), под винду тока бинарь. Взять сырцы и кросскомпильнуть mingw под винду?;-)

AIv ★★★★★
() автор топика
Ответ на: комментарий от gadfly

Вот только там патчи на очень старый питон, возможно придется дорабатывать напильником

gadfly ★★
()
Ответ на: комментарий от gadfly

Во! Питон правда не собрался... но мои модули с ним уже компилируются;-) Правда не линкуются нефига...

AIv ★★★★★
() автор топика
Ответ на: комментарий от shty

Как люди вообще под виндой работают???

MinGW под семеркой спас ситуацию. Отдельная песня была с линковкой к питону (оказывается libpython надо писать в КОНЦЕ команды), и отдельная песня была с запуском - ей оказывается хотелось длл, но под виндой она стеснючая до ужаса, просто дохла без слов. Пришлось под вайном поставить питон, запустить из под него собранное минГВ под виндвовс приложение, вот тут оно и раскололось;-)

Ну я и извращенец... Всем огромное спасибо!

AIv ★★★★★
() автор топика
Ответ на: комментарий от AIv

поздравлянтус :)

как работают? да вот так и работают - привыкли-с

shty ★★★★★
()

Тебе 300 000 раз говорили, что пайтон - тормозное говно. Жри теперь свой кактус и запивай слезами

anonymous
()
Ответ на: комментарий от anonymous

Что то я не помню, что бы тут или где бы то еще кто либо спрашивал твоего мнения по какому либо поводу. И знаешь почему? ПОТОМУ ЧТО НИКОГО ТВОЕ МНЕНИЕ НЕ ИНТЕРЕСУЕТ.

AIv ★★★★★
() автор топика
Ответ на: комментарий от JFreeM

поведаешь миру о неимоверных преимуществах такой связки перед выбранной ТС?

shty ★★★★★
()

Резюме - виндовс не нужен! Ну то есть вообще.

Для тех несчастных, кому придется делать что то подобное:

1) ставим mingw (под линух)

2) ставим wine

3) качаем и ставим виндузячий питон под wine, командой

msiexec /i python-2.6.2.msi

Предполагается, что SWIG отработал, и есть _wrap.cxx файл. Тогда

i586-mingw32msvc-g++ -O3 -Wall -I ~/.wine/drive_c/Python26/include/  -c mymodule.cpp
i586-mingw32msvc-g++ -O3 -Wall -I ~/.wine/drive_c/Python26/include/  -c mymodule_wrap.cxx
i586-mingw32msvc-g++ -shared -o _mymodule.pyd mymodule.o mymodule_wrap.o -L ~/.wine/drive_c/Python26/libs/ -lpython26
ВАЖНО - линкуемая библиотека питон указывается ПОСЛЕ всех объектников. Проверяем
wine ~/.wine/drive_c/Python26/python.exe myapplication.pyw

При таком подходе все необходимое встраивается в слинкованный модуль, при линковке mingw под виндой надо класть еще libgcc_s_dw2-1.dll libstdc++-6.dll из виндового mingw.

У меня код был насыщен изощренными шаблонами, которые протаскивались в питон - вроде как все собралось и протащилось...

fixed.

AIv ★★★★★
() автор топика
24 января 2012 г.
Ответ на: комментарий от Manhunt

Прикольно, спасибо. Правда я надеюсь, что больше мне подобного делать не придется;-)

AIv ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.