пытаюсь собрать некоторый код и использованием boost/Qt5, и получил такое:
C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$_ZTIN5boost6system14error_category12std_categoryE[__ZTIN5boost6system14error_category12std_categoryE]' has different size
C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$_ZTVN5boost6system14error_category12std_categoryE[__ZTVN5boost6system14error_category12std_categoryE]' has different size
если я правильно понимаю, тут речь идет о том, что в одном файле(error_code.o) две одинаковых секции?
как вообще такое может произойти, и что с этим делать?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>привет!
X>пытаюсь собрать некоторый код и использованием boost/Qt5, и получил такое: X>
X>C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$_ZTIN5boost6system14error_category12std_categoryE[__ZTIN5boost6system14error_category12std_categoryE]' has different size
X>C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$_ZTVN5boost6system14error_category12std_categoryE[__ZTVN5boost6system14error_category12std_categoryE]' has different size
X>
X>если я правильно понимаю, тут речь идет о том, что в одном файле(error_code.o) две одинаковых секции?
Это можешь проверить напрямую через objdump, readelf...
Но я думаю, что имеется в виду, что у неё другой размер, чем в другом файле. А почему сообщение двоится — уж так линкер работает.
X>как вообще такое может произойти, и что с этим делать?
Инстанциация шаблонов может происходить в любом исходнике, а линкер по определённым правилам выбирает, какой из результатов использовать в итоговом собранном файле. Результат инстанциации — как для любой функции — сегмент кода обязательно, и возможно сегмент данных (rdata — константные данные).
Судя по этому сообщению, один из методов контроля — размер — считается, что результаты всех генераций должны быть одинаковыми. Поскольку это данные, а не код, я склонен согласиться — это должна быть очень серьёзная ошибка. Значит, где-то один и тот же шаблон инстанциирован в режимах, когда размеры данных отличаются — например, один в 32, другой в 64 битах скомпилирован, или были разные режимы упаковки/выравнивания для структур.
Здравствуйте, niXman, Вы писали:
X>привет!
X>пытаюсь собрать некоторый код и использованием boost/Qt5, и получил такое:
X>C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$typeinfo for boost::system::error_category::std_category[_typeinfo for boost::system::error_category::std_category]' has different size
X>C:\boost-1.65.0-mingw53\lib/libboost_system.a(error_code.o): duplicate section `.rdata$vtable for boost::system::error_category::std_category[_vtable for boost::system::error_category::std_category]' has different size
X>если я правильно понимаю, тут речь идет о том, что в одном файле(error_code.o) две одинаковых секции?
Нет. Скорее всего с разными ключами компилятора собираешь. Или бардак с директориями include X>как вообще такое может произойти, и что с этим делать?
Собрать правильно
Здравствуйте, niXman, Вы писали:
X>ну хз... пока ничего не прояснилось...
загляни в бустовый файл, найди объявление одного и того же класса под разными дефайнами. сделай выводы
вот коммент оттуда:
// to maintain ABI compatibility between 03 and 11,
// define a class with the same layout
возможно, как раз и пытаешься залинковать два разных определения для одного и того же класса
файл: boost_1_65_0\boost\system\error_code.hpp
класс: class std_category
дефайн: BOOST_NO_CXX11_HDR_SYSTEM_ERROR