Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибки при использовании статических библиотек, статические билиотеки gcc 
:(
    Опции темы
shizoid
Дата 7.8.2013, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Мой проект поделен на модули - статические библиотеки, и одно приложение.  При сборке билиотек все проходит на ура. А вот при сборке исполняемого файла валит ошибки:

Код

/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::SerialConfigurator(Util::ParamStorage&)':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:9: undefined reference to `Util::ConfiguratorBase::ConfiguratorBase(Util::ParamStorage&)'
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:9: undefined reference to `Util::ConfiguratorBase::~ConfiguratorBase()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::SerialConfigurator(Util::ParamStorage&, std::string const&, unsigned int)':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:18: undefined reference to `Util::ConfiguratorBase::ConfiguratorBase(Util::ParamStorage&)'
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:18: undefined reference to `Util::ConfiguratorBase::~ConfiguratorBase()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::~SerialConfigurator()':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:23: undefined reference to `Util::ConfiguratorBase::~ConfiguratorBase()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::GetBaudrate() const':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:26: undefined reference to `Util::ConfiguratorBase::GetStorage() const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::GetDeviceName() const':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:30: undefined reference to `Util::ConfiguratorBase::GetStorage() const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::MakeParam()':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:34: undefined reference to `Util::ConfiguratorBase::GetStorage() const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o): In function `SourceData::SerialConfigurator::InitKey()':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:46: undefined reference to `Util::ConfiguratorBase::AddKey(std::string)'
/home/kopysov/projects/OrionWebModules/SourceData/Serial/SerialConfigurator.cpp:47: undefined reference to `Util::ConfiguratorBase::AddKey(std::string)'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(SerialConfigurator.o):(.data.rel.ro._ZTIN10SourceData18SerialConfiguratorE[_ZTIN10SourceData18SerialConfiguratorE]+0x8): undefined reference to `typeinfo for Util::ConfiguratorBase'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libSourceDatad.a(Serial.o): In function `SourceData::Serial::DoOpen(Util::ParamStorage const&)':
/home/kopysov/projects/OrionWebModules/SourceData/Serial/Serial.cpp:25: undefined reference to `Util::ConfiguratorBase::IsValid() const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(Bus.o): In function `TaskLevel::Bus::Start()':
/home/kopysov/projects/OrionWebModules/TaskLevel/Bus.cpp:72: undefined reference to `Protocol::DeviceListBase::begin()'
/home/kopysov/projects/OrionWebModules/TaskLevel/Bus.cpp:74: undefined reference to `Protocol::DeviceBase::IsPolling() const'
/home/kopysov/projects/OrionWebModules/TaskLevel/Bus.cpp:75: undefined reference to `Protocol::DeviceBase::GetAddres() const'
/home/kopysov/projects/OrionWebModules/TaskLevel/Bus.cpp:72: undefined reference to `Protocol::DeviceListBase::end()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(SessionQueue.o): In function `TaskLevel::SessionQueue::SetPriority(std::vector<unsigned char, std::allocator<unsigned char> > const&)':
/home/kopysov/projects/OrionWebModules/TaskLevel/SessionQueue.cpp:109: undefined reference to `Util::QueueGlassCash::QueueGlassCash(std::vector<unsigned char, std::allocator<unsigned char> > const&)'
/home/kopysov/projects/OrionWebModules/TaskLevel/SessionQueue.cpp:111: undefined reference to `Util::QueueGlassCash::IsValid()'
/home/kopysov/projects/OrionWebModules/TaskLevel/SessionQueue.cpp:114: undefined reference to `Util::QueueGlassCash::Make(std::vector<unsigned char, std::allocator<unsigned char> >&)'
/home/kopysov/projects/OrionWebModules/TaskLevel/SessionQueue.cpp:116: undefined reference to `Util::QueueGlassCash::~QueueGlassCash()'
/home/kopysov/projects/OrionWebModules/TaskLevel/SessionQueue.cpp:116: undefined reference to `Util::QueueGlassCash::~QueueGlassCash()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(BusConfigurator.o): In function `TaskLevel::BusConfigurator::GetTransportOption() const':
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:94: undefined reference to `SourceData::ParamConverterFactory::ParamConverterFactory()'
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:95: undefined reference to `SourceData::ParamConverterFactory::Create(unsigned int)'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(BusConfigurator.o): In function `TaskLevel::BusConfigurator::GetDeviceList() const':
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:149: undefined reference to `Protocol::Factory::Factory(unsigned short)'
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:153: undefined reference to `Protocol::Factory::CreateDeviceList() const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(BusConfigurator.o): In function `TaskLevel::BusConfigurator::GetProtocol() const':
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:224: undefined reference to `Protocol::Factory::Factory(unsigned short)'
/home/kopysov/projects/OrionWebModules/TaskLevel/BusConfigurator.cpp:225: undefined reference to `Protocol::Factory::CreateProtocol(std::shared_ptr<SourceData::SourceDataBase>&) const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(DeviceListDispatcher.o): In function `TaskLevel::DeviceListDispatcher::OnNoAnswer(Util::EmptyNotify<Protocol::SessionNotify, 4u, unsigned int, Util::empty_t2, Util::empty_t2, Util::empty_t2>*)':
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:44: undefined reference to `Protocol::DeviceListBase::operator[](unsigned int)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:45: undefined reference to `Protocol::DeviceListBase::TestNoAnswer(unsigned char) const'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:46: undefined reference to `Protocol::DeviceBase::IsOnline() const'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:47: undefined reference to `Protocol::DeviceBase::SetOnline(bool)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:49: undefined reference to `Protocol::DeviceBase::GetNoAnswer() const'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:56: undefined reference to `Protocol::DeviceBase::NoAnswerUp()'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(DeviceListDispatcher.o): In function `TaskLevel::DeviceListDispatcher::SessionSuccess(unsigned int)':
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:118: undefined reference to `Protocol::DeviceListBase::operator[](unsigned int)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:120: undefined reference to `Protocol::DeviceBase::NoAnswerClear()'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:122: undefined reference to `Protocol::DeviceBase::SetLastTime()'
make[1]: Leaving directory `/home/kopysov/projects/OrionWebModules/PowerTestDataSession'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:124: undefined reference to `Protocol::DeviceBase::IsOnline() const'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:125: undefined reference to `Protocol::DeviceBase::SetOnline(bool)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListDispatcher.cpp:132: undefined reference to `Protocol::DeviceListBase::TestSessionPause(unsigned char) const'
/home/kopysov/projects/OrionWebModules/OrionWebModules/../lib/libTaskLeveld.a(DeviceListConfigurator.o): In function `TaskLevel::DeviceListConfigurator::Configure(std::shared_ptr<Protocol::DeviceListBase>&)':
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListConfigurator.cpp:58: undefined reference to `Protocol::DeviceListBase::SetMaxAddress(unsigned int)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListConfigurator.cpp:59: undefined reference to `Protocol::DeviceListBase::SetMaxNoAnswer(unsigned int)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListConfigurator.cpp:60: undefined reference to `Protocol::DeviceListBase::SetMaxSessionPause(unsigned int)'
/home/kopysov/projects/OrionWebModules/TaskLevel/DeviceListConfigurator.cpp:61: undefined reference to `Protocol::DeviceListBase::SetPolling(std::list<unsigned char, std::allocator<unsigned char> > const&)'
collect2: error: ld returned 1 exit status
make[1]: *** [../bin/PowerTest] Error 1
make: *** [sub----PowerTestDataSession-make_default-ordered] Error 2
13:57:13: Процесс «/usr/bin/make» завершился с кодом 2.


Причем этот проект под WIN MSVC2010 все отлично собирается, не понимаю что за особенность GCC такая лазить за либами в исходники дважды.
PM MAIL   Вверх
shizoid
Дата 7.8.2013, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



Вобщем погуглил покумекал, дошло что порядок билиотек для gcc имеет очень большое значение, что самое плохое перекрестные ссылки в статичсеких библиотеках не привествуются. Как боротся с этим?
PM MAIL   Вверх
shizoid
Дата 7.8.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 17.11.2008

Репутация: нет
Всего: нет



В моем случае помогло добавить ключи -Wl,--start-group [список библиотек] -Wl,--end-group, для qmake выглядит так:
Код

LIBS += -L$${LIB_PATH}
unix{
    LIBS+=-Wl,--start-group \
}
LIBS+=  -lOrionPro$${DBG_SUF} \
        -lTaskLevel$${DBG_SUF} \
        -lSourceData$${DBG_SUF} \
        -lTest$${DBG_SUF} \
        -lProtocol$${DBG_SUF} \
        -lUtil$${DBG_SUF} \
        -lSerial$${DBG_SUF} \
unix{
        LIBS+=-Wl,--end-group
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0611 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.