|
|
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
Товарищи, выручайте - совсем я запутался с кросс-платформенной разработкой. Я пишу программу на C++ с использованием некоторых сторонних библиотек: WxWidgets, SpiderMonkey, некоторые другие. Целевые платформы: Linux и Win32. Хочется вести проект так, чтобы можно было заниматься разработкой только в Linux'е а под Windows просто получать бинарники. Желательно маленькой кровью. Для сборки я использую обычный make. Пока сторонняя библиотека была одна (WxWidgets) проблем не было. У меня получилось наладить кросс-компиляцию под винду с помощью MinGW и можно было спокойно работать в линуксе не меняя ОС. Благо приложение отлично запускается под wine и можно не менять ОС часто даже для тестирований. Когда дело дошло до SpiderMonkey выяснилось что его кросс-компилировать не получается. Даже построить с помощью MinGW не получается, потому что у него нет в поставке configure, а прилагающиеся mk файлы трогать не хочется. А даже если и получилось бы - есть риск что такой фокус не пройдет с другими библиотеками (Предполагается еще добавление OpenGL и Scintilla). Теперь вопрос - как организовать проект так, чтобы можно было его спокойно собирать под обоими системами? Нужно-ли носить вместе с проектом заголовки и либы от сторонних библиотек или они должны отельно ставить в каждую систему? Поможет-ли уход от make к другой системе сборки? Книжку или сайт на худой конец посоветуйте! Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 02:30:28 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
МолекулярныйДинамик wrote: > Теперь вопрос - как организовать проект так, чтобы можно было его > спокойно собирать под обоими системами? 1) Использовать Qt и писать *.pro файлы. 2) использовать только те библиотеки, которые портированы и "туда", и "сюда". 3) использовать только функции доступные на обоих платформах или врапперы над ними. и все равно в некоторых местах может понадобиться загоняться. > Нужно-ли носить вместе с > проектом заголовки и либы от сторонних библиотек или они должны > отельно ставить в каждую систему? ИМХО, не всегда и не обязательно. > Поможет-ли уход от make к другой > системе сборки? Книжку или сайт на худой конец посоветуйте! 0) GNU Make и под винду портирован, проблема в чем? 1) Поможет, но не полностью. См в сторону scons - www.scons.org. Он более по-человечески проект собирает. 2) Под той же виндой можно установить MSys (см на www.mingw.org) или cygwin), и под виндой будут доступны autotools, configure и *nix утилиты. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 04:58:25 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
МолекулярныйДинамик wrote: > Товарищи, выручайте - совсем я запутался с кросс-платформенной > разработкой. И ещё - определитесь, что вам нужно: 1) кроссплатформенная разработка (т.е. компилим под линуксом для windows, и там же (под линуксом) его и отлаживаем) или 2) переносимость исходников. (т.е. компилим под линуксом, работает. Компилим под виндой, ничего не меняя - тоже работает) А то, ИМХО, у вас эти два понятия слились воединою. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 08:58:16 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErV, спасибо за ответ! Qt использовать не получится - уже большая часть GUI написана на WxWidgets. Wx в принципе всем устраивает - осталось только понять как удобно делать билды под разные платформы. В идеале хочется именно кросс-компиляции. Но на сколько я понимаю для этого мне нужно пересеборать все сторонние библиотеки с использованием MinGW, так? Мне кажется это не всегда возможно, и поэтому я думаю о том чтобы компилировать бинарник под винды собственно под виндой. В связи с этим как раз второй вопрос - как правильно организовать структуру проекта? какие папки создавать? куда класть свои сорцы? куда класть библиотеки, или не нужно их таскать вместе с исходниками проекта? чем строить? То есть вопросы скорее организационного плана. Так сказать нужны best practices. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 14:37:55 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
МолекулярныйДинамик wrote: > В идеале хочется именно кросс-компиляции. Но на сколько я понимаю для > этого мне нужно пересеборать все сторонние библиотеки с использованием > MinGW, так? Не обязательно. Я на линуксе для сборки виндовых приложений пользовался: 1) scons + Visual Studio Compiler Toolkit 2003 через Wine + Platform SDK. Плюсы: можно без танцев с бубном линковать с библиотеками под msvc. Минусы: Не совсем удобно из-за того, что с отладкой будут проблемы, и через Wine в некоторых случаях программа может не пойти или пойти с глюками. И ещё придется ковыряться в скриптах scons, так как "из коробки" он такой оригинальный набор инструментов не поддерживает (хотя нормальные компиляторы автоматом определяет), нужно переопределять некоторые переменные и писать python-скрипты. Далее, VC Compiler Toolkit и PlatformSDK под Wine не устанавливаются. Но если взять установленные каталоги с windows машины - все будет отлично работать. Скрипты с примером приложения могу выложить. 2) Можно собрать mingw для кросс-компиляции, инструкции где-то в интернете валяется (в гугл с запросом типа mingw crosscompiler). Т.е. будет линуксовый бинарник mingw, который будет делать виндовые бинарники программ. Плюсы: Работает быстрее, чем виндовый mingw. Вроде бы он даже поддерживается автоматически через scons, не знаю - не пробовал давно. Минусы: Им вообще нельзя скомпилировать Qt (я пробовал. Не компилится). Использовать в нём Qt - можно (взять библиотеки от прекомпилированного пакета), но придется долго мучаться с qmake, как я понимаю. Отлаживать придется через winedbg или под виндой. Танцы с бубном при подключении сторонних msvc библиотек обеспечены. 3) Можно использовать виндовый MinGW, запуск через wine. Плюсы: можно утащить виндовый каталог с mingw в линукс и там им пользоваться без изменений. Команды компиляции останутся почти те же. Минусы: В последних версиях wine (0.9.50), как я понял, кто-то умудрился поломать функцию поиска файла в windows-PATH директориях. Из-за этого не работают reimp и некоторые другие утилиты. Соответственно, нужно будет искать старую версию, в которой этого глюка нет (такая точно была). Кроме этого, под вайном неудобно запускать виндовый scons (wine почему-то не хочет запускать батники (которым и является scons под windows) просто так, надо запускать wine cmd, затем оттуда вызывать батник - это неудобно, хотя можно сделать враппер-скрипт.) И опять же, танцы с бубном при подключении сторонних msvc библиотек обеспечены. Это если компилировать вин-приложение под линуксом. Как делать наоборот (компилировать лин приложение под виндоусом), я не знаю, вероятно, что можно извратиться и поискать дистрибутив, который ставится на Windows и в нём (внутри windows) и работает (такой был, но давно, и я о нём не слышал), но, ИМХО, это пустая трата времени. В любом случае, собирается обычно все без проблем, но неудобства возникнут при отладке - под линуксом виндовое приложение отлаживать можно, но неудобно (хотя дебаггеры для винды есть и под линуксом работают(winedbg тот же, можно виндовые запустить)). Варианты следующие: 1) Можно поставить обе операционки на одну машину, но перезагрузка туда-сюда займет много времени. Я так пробовал, это дико неудобно. Тем более под виндой намного менее удобно работать. 2) Можно поддерживать только одну платформу, на вторую забить, и предоставлять её "как есть". Если лицензия GPL, то, кому надо - сам поправит и пришлет патч. 3) Можно взять две машины - одну (линукс) под разработку, и одну (виндоус) - как тестовый полигон. Идеальный вариант. Минус - дорого и электричество жрет. 4) Можно поставить виртуальную машину, и на неё воткнуть вторую ось. Т.е., под линуксом использовать vmware, qemu или что-то в этом духе, воткнуть туда win2k (как один из наименее прожорливых по поводу свободного места) или даже win98, и там и тестировать windows приложения. Компилить под линуксом, т.к. виртуальная машина будет работать медленнее. Почти идеальный вариант, за одним "но": не будет, например, аппаратного 3D ускорения (которое нужно мне, но которое, мне кажется, совершенно не нужно вам). -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 17:20:05 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErV wrote: > Можно использовать виндовый MinGW, запуск через wine. Я таким образом одно время собирал приложения Qt4 для виндоус из-под Linux системы. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 17:21:57 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
МолекулярныйДинамикВ идеале хочется именно кросс-компиляции. Но на сколько я понимаю для этого мне нужно пересеборать все сторонние библиотеки с использованием MinGW, так? Можно, но не обязательно. Можно собирать библиотеки при помощи VS и отдавать их MinGW - примет как родных. Ну а так как большинство портируемых библиотек для виндов собираются именно VC то и проблем обычно не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 17:31:15 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > Можно, но не обязательно. Лично у меня проблемы были при попытке подключить msvc либу (для dll) к проекту mingw. Лечится только reimp'ом (но не всегда) или пересборкой либы. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 19:20:57 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErVЛично у меня проблемы были при попытке подключить msvc либу (для dll) к проекту mingw. Лечится только reimp'ом (но не всегда) или пересборкой либы.Какие именно проблемы? А для dll библиотеки импорта вообще не нужны, кстати. Ключик -dmydll.dll для gcc или g++ и получишь статическую линковку к dll вообще без библиотек импорта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2007, 20:32:41 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > Какие именно проблемы? Вообще не удавалось подключить msvc либу ни разу. Пример (что под руку попалось): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Берем либу (SDL-devel-1.2.12-VC6.zip) для msvc6.0 (доступно на www.libsdl.org), sdl.lib и sdlmain.lib. кидаем обе в каталог с файлом. (и заголовки туда же) Пытаемся компилить: Код: 1. Получаем: Код: plaintext 1. 2. 3. mangled именами msvc, т.к. обычные он, судя по всему, находит. Или же я что-то пропустил. Какая-то похожая гадость у меня стабильно получалась, когда я пытался DirectX-библиотеки подключить к mingw, ещё какие-то библиотеки, недоступные под mingw, либы для разработки плагинов, и т.д. Хотя это под линухом (mingw виндовый), но под виндой стабильно происходила такая же хрень. Примеры далее > А для dll библиотеки импорта вообще не нужны, кстати. Ключик > -dmydll.dll для gcc или g++ и получишь статическую линковку к dll > вообще без библиотек импорта. может быть, -l имелся в виду? при -d он ругается на точку. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 02:00:20 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
Я поставил на отдельный компьютер Linux. В Linux есть все средства для удаленной работы как в графическом режиме, так и в консоли. Таким образом одновременно доступны полноценные Linux и Windows. Исходники на файл-сервере. Если вы занимаетесь этим профессионально, не вижу смысла тратить время на разборки с кросс-компиляцией и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 07:53:14 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
gcc не использует lib файлы ему подавай *.а *.la для статической линковки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 11:18:15 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
Всем большое спасибо за ответы! Удалось разобраться с кросс-компиляцией: собираю под Линуксом бинарники для обоих систем - с помощью gcc под Linux, и с помощью MinGW под Windows. Библиотеку WxWidgets я хочу статически компоновать вместе со своим приложением - поэтому её пришлось пересобрать с помощью MinGW. Больших проблем это не вызывало потому что на вики библиотеки есть хорошее описание этого. Другую стороннюю библиотеку, которую я использую, собрал как dll под виндой (наверняка можно сделать это и через ./wine name ... но я не стал пока возиться) и скопировал в папку с виндовым бинарником. Пока у меня получается два Make файла, но нужно будет это отрефакторить как-нибудь, когда я подначитаюсь на эту тему. Так как моё приложение работает под wine'ом в винду можно вообще не переключаться! Красота!!! Еще раз спасибо, особенно господам ErV & White Owl! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 11:42:39 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErVБерем либу (SDL-devel-1.2.12-VC6.zip) для msvc6.0 (доступно на www.libsdl.org), sdl.lib и sdlmain.lib. кидаем обе в каталог с файлом. (и заголовки туда же)Вот как раз над SDL я когда-то и издевался когда изучал возможности mingw :) ErV Надо понимать, проблемы у mingw с mangled именами msvc, т.к. обычные он, судя по всему, находит. Или же я что-то пропустил.Пропустил. В этом архиве ошибка - SDLmain.lib скомпилирована не VC6 а VC2005 и соответственно там вылазит куча странностей. Пересобрал эту библиотеку через VCToolkit2003 и все собралось без единого варнинга. ErV> А для dll библиотеки импорта вообще не нужны, кстати. Ключик > -dmydll.dll для gcc или g++ и получишь статическую линковку к dll > вообще без библиотек импорта. может быть, -l имелся в виду? при -d он ругается на точку.нет, именно -d я вот тут уже писал инструкцию как жить без библиотек импорта: /topic/390583#3759081 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 18:43:22 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > Пропустил. В этом архиве ошибка - SDLmain.lib скомпилирована не VC6 а > VC2005 и соответственно там вылазит куча странностей. Пересобрал эту > библиотеку через VCToolkit2003 и все собралось без единого варнинга. > 1) т.е. VC2005 библиотеки оно не понимает? 2) версия mingw-g++ какая? 3) за инструкцию спасибо. Когда опять возникнет острая необходимость чего-то кросс-платформенно компилить, попробую. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 22:58:55 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
МолекулярныйДинамик wrote: > Еще раз спасибо, особенно господам ErV & White Owl! Пожалуйста. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2007, 22:59:27 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErV> Пропустил. В этом архиве ошибка - SDLmain.lib скомпилирована не VC6 а > VC2005 и соответственно там вылазит куча странностей. Пересобрал эту > библиотеку через VCToolkit2003 и все собралось без единого варнинга. 1) т.е. VC2005 библиотеки оно не понимает? Понимает, только библиотеки из mingw это почти полная копия библиотек Win-PSDK. И ты всегда используешь либо то, либо другое. А в VS2005 добавили кучу новых функций которые дефайнами подставляются вместо привычных. Та же работа с памятью например. И они подсовывают эти новые функции в качестве вызовов к стандартным библиотекам, если не делать специальных телодвижений запрещающих это. Но кто-ж про них помнит? :) В итоге, если захочешь использовать mingw с объектником от VC2005 прийдется полностью запрещать стандартные mingw библиотеки и полностью переходить на библиотеки VC2005. Иначе начинаются игры типа alloc-delete. ErV2) версия mingw-g++ какая?3.4.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2007, 18:13:28 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
White Owl wrote: > Понимает, только библиотеки из mingw это почти полная копия библиотек > Win-PSDK. И ты всегда используешь либо то, либо другое. А в VS2005 > добавили кучу новых функций которые дефайнами подставляются вместо > привычных. Та же работа с памятью например. И они подсовывают эти > новые функции в качестве вызовов к стандартным библиотекам, если не > делать специальных телодвижений запрещающих это. Но кто-ж про них > помнит? :) В итоге, если захочешь использовать mingw с объектником от > VC2005 прийдется полностью запрещать стандартные mingw библиотеки и > полностью переходить на библиотеки VC2005. Иначе начинаются игры типа > alloc-delete. Ясно, спасибо за инфу. > 3.4.2 такая же. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2007, 04:47:39 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
ErVПолучаем: Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 12:13:00 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > как это у тебя два мейна? Один мейн. Для SDL программы есть (под винду и некоторые другие платформы) либа, в которой находится winmain, и который передает управление в int main();. Т.е. имеем виндовое приложение, в котором мы входим через int main и при этом не создается консоли (stdout/stderr пишутся в *.txt файлы с соответствующими именами). Это для портабельности. Что касается описываемых здесь мною траблов, то выяснилось, что для корректного линка SDL желательно указывать аргументы, которые выдает sdlconfig --libs (или как там его). Т.е. надо было линковать с флагами "-mwindows -lmingw32 -lSDLmain" и т.д. Я первые два пропустил и получал вот эту вот ошибку (причем с родными либами тоже) при подключении SDL.h. -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 13:31:31 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
в означенном файлике c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../libmingw32.a(main.o (.text+0x106):main.c тоже есть main ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2007, 13:37:14 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
maXmo wrote: > в означенном файлике > c:/mingw/bin/../lib/gcc/mingw32/3.4.2/../../../libmingw32.a(main.o > (.text+0x106):main.c тоже есть main начало SDL_main.h без комментариев, см. последнюю строчку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ЗЫ. Мне просто сейчас неохота ковыряться, что там чего вызывает :). -- We are all going to hell and I'm driving the bus Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2007, 04:30:53 |
|
||
|
Кросс-платформенная разрабока
|
|||
|---|---|---|---|
|
#18+
Возникла та же проблема, с SDL, сделал как тут вычитал, дык вот: D:\UnPacked\3d\NEHE\OpenGL-intro-1.1.1\test>g++ -olesson02 lesson02.o -mwindows -lmingw32 -lSDLmain -llibSDL lesson02.o:lesson02.c:(.text+0x24): undefined reference to `glViewport@16' lesson02.o:lesson02.c:(.text+0x4f): undefined reference to `glClearColor@16' lesson02.o:lesson02.c:(.text+0x5c): undefined reference to `glClearDepth@8' lesson02.o:lesson02.c:(.text+0x6b): undefined reference to `glDepthFunc@4' lesson02.o:lesson02.c:(.text+0x7a): undefined reference to `glEnable@4' lesson02.o:lesson02.c:(.text+0x89): undefined reference to `glShadeModel@4' lesson02.o:lesson02.c:(.text+0x98): undefined reference to `glMatrixMode@4' lesson02.o:lesson02.c:(.text+0xa0): undefined reference to `glLoadIdentity@0' lesson02.o:lesson02.c:(.text+0xce): undefined reference to `gluPerspective@32' lesson02.o:lesson02.c:(.text+0xdd): undefined reference to `glMatrixMode@4' lesson02.o:lesson02.c:(.text+0xf4): undefined reference to `glClear@4' lesson02.o:lesson02.c:(.text+0xfc): undefined reference to `glLoadIdentity@0' lesson02.o:lesson02.c:(.text+0x11b): undefined reference to `glTranslatef@12' lesson02.o:lesson02.c:(.text+0x12a): undefined reference to `glBegin@4' lesson02.o:lesson02.c:(.text+0x14c): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x16e): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x190): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x198): undefined reference to `glEnd@0' lesson02.o:lesson02.c:(.text+0x1b7): undefined reference to `glTranslatef@12' lesson02.o:lesson02.c:(.text+0x1c6): undefined reference to `glBegin@4' lesson02.o:lesson02.c:(.text+0x1e8): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x20a): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x22c): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x24e): undefined reference to `glVertex3f@12' lesson02.o:lesson02.c:(.text+0x256): undefined reference to `glEnd@0' collect2: ld returned 1 exit status OpenGL где-то не подключен?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2007, 14:12:44 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=263&tid=2027611]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
62ms |
get forum data: |
4ms |
get page messages: |
195ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 548ms |

| 0 / 0 |
