duplicate section 'XXX' has different size
От: niXman Ниоткуда https://github.com/niXman
Дата: 31.08.17 14:23
Оценка:
привет!

пытаюсь собрать некоторый код и использованием 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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: duplicate section 'XXX' has different size
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.09.17 04:35
Оценка:
Здравствуйте, 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 битах скомпилирован, или были разные режимы упаковки/выравнивания для структур.
The God is real, unless declared integer.
Re[2]: duplicate section 'XXX' has different size
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.09.17 04:53
Оценка:
Здравствуйте, netch80, Вы писали:

так это один и тот же файл.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 01.09.2017 4:54 niXman . Предыдущая версия .
Re[3]: duplicate section 'XXX' has different size
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.09.17 06:04
Оценка:
Здравствуйте, niXman, Вы писали:

X>так это один и тот же файл.


Это проверено objdumpʼом, или только предположение?
The God is real, unless declared integer.
Re[4]: duplicate section 'XXX' has different size
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.09.17 07:06
Оценка:
Здравствуйте, netch80, Вы писали:

N>Это проверено objdumpʼом, или только предположение?

это на основании вывода линкера.

а какая командная строка для objdump нужна?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: duplicate section 'XXX' has different size
От: kov_serg Россия  
Дата: 01.09.17 07:34
Оценка:
Здравствуйте, 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>как вообще такое может произойти, и что с этим делать?
Собрать правильно
Re: duplicate section 'XXX' has different size
От: uzhas Ниоткуда  
Дата: 01.09.17 09:47
Оценка:
Здравствуйте, niXman, Вы писали:

X>пытаюсь собрать некоторый код и использованием boost/Qt5, и получил такое:

X>что с этим делать?

гугли и обрящешь
например: https://stackoverflow.com/questions/14181351/i-got-duplicate-section-errors-when-compiling-boost-regex-with-size-optimizati

исходники собрались с разными настройками. вот линкер и ругнулся. это могло быть расхождение в Debug/Release в том числе
Re[2]: duplicate section 'XXX' has different size
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.09.17 12:39
Оценка:
ну хз... пока ничего не прояснилось...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: duplicate section 'XXX' has different size
От: uzhas Ниоткуда  
Дата: 01.09.17 13:32
Оценка: +1
Здравствуйте, 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
Re[4]: duplicate section 'XXX' has different size
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.09.17 13:40
Оценка:
Здравствуйте, uzhas, Вы писали:

U>файл: boost_1_65_0\boost\system\error_code.hpp

U>класс: class std_category
U>дефайн: BOOST_NO_CXX11_HDR_SYSTEM_ERROR

все верно!
вот только что получилось собрать. проект собирается с использованием -std=c++11, а boost собирался без этого флага.

всем спасибо, вопрос закрыт.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: duplicate section 'XXX' has different size
От: uzhas Ниоткуда  
Дата: 01.09.17 14:45
Оценка: :)
Здравствуйте, niXman, Вы писали:

X>проект собирается с использованием -std=c++11, а boost собирался без этого флага.


Семён Семёныч!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.