После некоторого количества произнесенного мата и страшных заклинаний про мать оно таки собралось, да. Только тесты не проходят. Под windows 32bit & 64bit все работает, так же как и под linux 32bit, что совсем уже подозрительно. А под linux 64 бит - нет
В результате долгих ковыряний в отладчике выяснилось что все дело в размере long. Дело в том что у них
Ну и как скажите мне правильно писать одновременно под windows & linux и 32 & 64 бит в таком случае ? Или может книжка какая есть умная специально про такие случаи ?
Update: книжка нашлась -Cross-Platform Development in C++: Building Mac OS X, Linux, and Windows Applications. Учитывая что она довольно свежая (декабрь 2007), я надеюсь про 64битные операционки там чо-нть да будет рассказано
Тоже в своё время сильно матерился, когда выяснил что мой код криво работает под linux 64 из-за нестандартного размера long-a.
ОтветитьУдалитьПодозреваю, что в сурьёзных проектах нужно делать как-то так:
#ifdef _MSVC_
typedef unsigned long ULONG;
#elif _GCC_
typedef unsigned int ULONG;
#endif
а почему _MSVC_, а не _MSC_VER например ?
ОтветитьУдалитькроме того меня тут просветили, что под linux есть файл заголовков stdint.h, в котором уже описаны типы int32_t & uint32_t, и лучше всего использовать именно их. Томущо они грозятся быть одинаковыми под linux 32 & 64.
Однако услышав следующий логичный вопрос - а под freebsd есть такой же header ? - местный гуру впал в продолжительную задумчивость, бгг
Используй LP32, тебе реально надо 64-бита?
ОтветитьУдалитьstdint.h и intypes.h - это С99, оба есть под freebsd.
А переопределения ни к чему хорошему не приведут (только если свои типы введешь и на них перейдешь).
> Используй LP32
ОтветитьУдалитьтипичные отмазки линуксоидов. Когда их носом тычут в кривую убогую реализацию чего-либо или вовсе в отсутствие таковой - они громко вопят в ночи "значит это никому не нужно", "не осилил !", "используй xyz" (где xyz точно такая же убогая, для сборки требует over 9000 пакетов, не проходит 99% тестов и годится для решения задачи еще менее). При этом они даже формулировку задачи умудряются не спросить или переврать, бгг
сколько звезд у тебя на погонах на лоре ? (c)
Мне пофиг какая там реализация. Хочешь быть уверенным в размере типов - введи свои. Жил бы под nix'ами думал бы иначе.
ОтветитьУдалитьКстати, JFYI я под винды писать больше люблю.
> Хочешь быть уверенным в размере типов - введи свои
ОтветитьУдалитьеще раз для особо невнимательных - код уже был отлажен и портирован на 64 бита под винду. Почему я не могу его без гемора собрать под 64битный же линукс на том же самом камне ?
> Жил бы под nix'ами
упаси меня сотона !
> я под винды писать больше люблю
потому что там все для людей сделано, а не для совместимости со всяким хламом 30-40 летней давности
везде одна херня
ОтветитьУдалить