LINUX.ORG.RU

Перенос программы из Windows


0

0

Первый раз пришлось переносить программу написанную под Windows на Linux, не думал, что возникнит столько проблем! Первым делом я переопределил функции и стандартные типы, не поддерживаемые в Linux: #define AnsiString string; функции обработки имен файлов, получающие параметрами AnsiString в .h файле, заинклудил его ко всем .h файлам. Полученная программа откомпилирована под Borland Builder C++ 5 в ANSI и прекрасно работает!!!! Под Linux творятся чудеса: 1. Все компилируется под g++ 2. не работает!!! 3. с помощью Emacs + gdb выясняется что игнорируется (не вызывается вообще) конструктор статичеой переменной класса. Breakpoin на эту функцию класса ставится, но отладчик туда не входит. В статической переменной - указатель на объект (т. е. глобальная переменная) память выделяется оператором new <Класс>. Причем для других статических переменных классов такой проблемы нет. 4. программа ухитряется зациклиться при передаче параметра типа AnsiString (string после переопределения) в другой конструктор! Причем, breakpoint до вызова останавливает выполнение, а breakpoint внутри конструктора ставится, но gdb виснет до него. 5. Не знаю как в частях программы работающих хорошо, но в этих функциях GDB неверно показывает строку выполнения (в Emacs)- на две - три строки ниже, чем фактически находится процесс. Это видно по инициализации переменных. Хочу подчеркнуть, что под Windows компилируются те же файлы за исключением, что функция access()(проверка прав доступа) берется из библиотеки io.h а не из unistd.h и все благополучно работает!

anonymous

Простой перенос программ из мастдайки на юникс - бывает только на надуманных примерах из "толстых" книжек. В жизни все намного интересней.
Самое главное, скажем так, программистское дао, - чтобы уверенно чуствовать себя в юниксе - нужно начать по-другому думать. Как именно - каждый решает для себя сам. Но то, что по-другому чем на мастдайке - это факт.

Есть конечно парочка самых общих рекомендаций, но, боюсь, их поймут только те, кто уже постиг дао. Это все равно, что объяснить чувство голода тому, кто никогда его не испытывал. Можно объяснить только тому, кто его чувствовал, но с другой стороны, объяснять это уже смысла особого нет, т.к. знание уже есть. Это тот самый феномен, который называется философами - переход на новый качественный уровень восприятия.
Так вот, когда создаешь программы под юниксом, сначала нужно подумать, а только потом писать, а не наоборот, как это делается под мастдайкой - сначала писать, а сунув морду в отладчик - думать.

С этим сейчас конечно начнут спорить пионЭры, которых с появлением линукса в среде юникса появилось огромное множество, но тем не менее, думаю у настоящих юниксоидов, которые любят экономить свое время, не вызовет сомнения утверждение, что перед тем как что-либо интресное писать на це/це++/перл/шелл/проч.проч. нужно на листочке набросать мысль по-русски и попытаться ее растолковать своим коллегам-оппонентам. Если получилось и критики _уже_ нет - вот тебе текстовый редактор, если не вышло - на хер такая прога никому не нужна.

Теперь по теме: если ты писал свою прогу для мастдайки, но не как GUI-вую обертку к какому-нить сиквелу, и если она не так тривиальна как "Hello world", а чуть поинтереснее, то скорее всего (повторяю, скорее всего, но не 100%) ее придется перепроектировать, потому что на юниксе идеология создания ПО несколько иная, чем на мастдае.

От себя хочется добавить: юникс - это среда программирования, мастдайка - всего лишь GUI-вая обертка для интеловской железки, но на среду программирования она не тянет.

p.s. вот какие мысли в голову приходят, когда с работы приходишь позже обычного;)))

proff
()

Я не гуру, только учусь, но позволю себе дать совет. Если хочешь писать переносимую прогу, сразу нужно использовать переносимый компилятор (тот же gcc или интелловский), ну и библиотеки соответственно, если применяются какие-то нестандартные (gtk там и т.п.). Успехов.

shumer
()

> От себя хочется добавить: юникс - это среда программирования

юникс -- юниверсальная среда программирования

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