Мы активно используем boost :: serialization и templates в целом. Кажется, все идет хорошо.В объектном файле слишком много разделов
Кроме того, мы нанесли удар по нашим сборкам Windows. Кажется, что проблемы в объектных файлах слишком велики. Мы используем MinGW/Msys с g ++ 4.7.0.
c:/mingw/bin/../lib/gcc/mingw32/4.7.0/../../../../mingw32/bin/as.exe: CMakeFiles/source.dir/sourcecode.cpp.obj: too many sections (33396)
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Assembler messages:
C:\Users\username\AppData\Local\Temp\ccnAocvD.s: Fatal error: can't write CMakeFiles/source.dir/sourcecode.cpp.obj: File too big
Мастер Google показал эту архивную сообщение, http://sourceforge.net/mailarchive/forum.php?thread_name=CA%2Bsc5mkLvj%3DW9w2%3DsY%3Dc_N%3DEwnsQuPDEX%3DiBcbsbxS3CuE_5Bg%40mail.gmail.com&forum_name=mingw-users
В нем, это указывает на то, что другой человек попал в значительной степени тот же загвоздка. Он указывал на вариант для опции Visual Studio /bigobj
, который, как представляется, выполняет то, что нам нужно. Однако мы не можем перейти к Visual Studio.
Одно из предложений заключалось в том, чтобы добавить --hash-size в опции ассемблера. Это не помогло.
Если я не ошибаюсь, проблема заключается в том, что в объектных файлах есть ограничение на 2^16 записей. На самом деле, согласно сообщению об ошибке, я бы рискнул, что это подписанные 2^16 записей, но это арахис. Опция /bigobj
для Visual Studio изменила бы это на 2^32. Результат списка рассылки не знал об эквивалентной опции для gcc. Дальнейшие результаты Google, похоже, не имеют отношения к этому.
На этом этапе нам придется реорганизовать наш код (ugh), чтобы обойти это ограничение. Но я по-прежнему обеспокоен тем, что с тяжелыми шаблонами мы снова и снова сталкиваемся с проблемой (мы уже сталкиваемся с ней с тремя исходными файлами).
Так что мой вопрос таков; есть ли gcc эквивалент опции /bigobj
от Microsoft? Есть третий вариант, который я еще не нашел?
Может быть, изменить gcc? – Yakk
Лично я бы с удовольствием. Мне нужно будет изучить формат файлов объектов, которые в настоящее время используются. Я должен придумать новый формат. Звучит как отличный личный проект. К сожалению, мой работодатель не хочет такой ответственности. :) – inetknght
Другая возможность заключается в том, что объектный файл нарушил барьер на 2 ГБ или что-то подобное. Насколько вы уверены, что это количество экспортированных символов? Некоторые googling указывают, что gcc не имеет жесткого барьера при 2^16 ... Вы посмотрели на http://mingw-w64.sourceforge.net/? – Yakk