использование сторонней библиотеки (libconfig) с Qt (C++)

У меня возникли проблемы с тем, чтобы сторонняя библиотека (libconfig++) работала в Qt.

При компиляции в Qt я получаю сообщения об ошибках, такие как:

undefined reference to `_imp___ZN9libconfig6ConfigC1Ev'
undefined reference to `_imp___ZN9libconfig6Config8readFileEPKc'
undefined reference to `_imp___ZNK9libconfig6Config5writeEP6_iobuf'

и Т. Д.

В моем файле .pro у меня есть:

LIBS += -L$$PWD/libconfig/lib -lconfig++

И я добавил libconfig++.dll и libconfig++.lib в правильную папку.

В этом проекте успешно используется другая сторонняя библиотека (аналогичным образом), поэтому я не думаю, что это проблема с синтаксисом или включением.

Кажется, это может быть проблема с искажением имен С++? Как я могу это подтвердить?

Прямо сейчас я создаю библиотеку в VS 2008 (я пытался создать ее как динамическую, так и статическую библиотеку, ни одна из них не работает). Я думаю, что я мог сделать это в прошлом с другими библиотеками. Есть ли какой-то флаг в VS, который я неправильно устанавливаю?

Спасибо


person Peter991    schedule 22.08.2011    source источник
comment
Подтвердили ли вы, что библиотека и путь к ней правильно отображаются в выходных данных сборки?   -  person Troubadour    schedule 22.08.2011
comment
Да, путь отображается правильно. У меня все идентично тому, как я включил другую стороннюю библиотеку, и код работает нормально, если я удалил ссылки на libconfig в своем коде. Я сильно подозреваю искажение имени, но я не знаю, как подтвердить, что это проблема (или как ее исправить)   -  person Peter991    schedule 23.08.2011
comment
Свойства конфигурации-›C/C++-›Дополнительно-›Компилировать как задано значение Компилировать как код C++ (/TP)? libconfig установлен как зависимость (Проект->Зависимости проекта...)?   -  person Gnawme    schedule 23.08.2011
comment
Как вы компилируете приложение, использующее эту библиотеку? Схема изменения имени указывает, что вы компилируете библиотеки MinGW/gcc Qt, и вы не можете смешивать с ней библиотеку C++, скомпилированную с помощью VC++ (подойдет библиотека C).   -  person alexisdm    schedule 23.08.2011
comment
Вы уверены, что имя .dll не должно быть config++.dll? Обратите внимание на различные соглашения об именах библиотек между Unix-подобными и Windows. В Unix-подобных файлах библиотеки .so начинаются с префикса lib, который не включен в параметр компоновщика -l. В Windows файлы .dll не имеют неявного префикса lib. Другими словами, файл Unixy libconfig++.so обычно будет config++.dll в Windows.   -  person hyde    schedule 27.08.2015


Ответы (1)


Если ваша библиотека называется "libconfig++.lib", возможно, вам придется изменить

LIBS += -L$$PWD/libconfig/lib -lconfig++ 

to

LIBS += -L$$PWD/libconfig/lib -llibconfig++ 
person Tim Meyer    schedule 23.08.2011