qt-creator и msvc не могут добавить (статическую) библиотеку

У меня есть сторонняя (с закрытым исходным кодом) статическая библиотека (.lib), написанная на C, с заголовком, совместимым с C++, и очень простой тестовой программой C++.

После создания нового проекта в Qt-creator я попытался скомпилировать программу и связать со статической библиотекой, но компоновщик не может разрешить символы: "Неразрешенный внешний символ", ошибка LNK2019.

Я использую Qt 5.3 с компилятором из VisualC++ 2013 Express (который, я думаю, является MSVC12), и файл .pro, используемый в Qt-creator, выглядит следующим образом:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

LIBS += -L"C:/Users/myuser/myproject" -lsomelib

SOURCES += main.cpp

HEADERS += \
    somelib.h

предполагая, что в C:\Users\myuser\myproject есть следующие два файла:

  • libsomelib.lib
  • somelib.h

Я не уверен, что указать во флаге -l, поэтому я попытался с libsomelib.lib, libsomelib и somelib, как я сделал бы в Linux, но каждая комбинация не увенчалась успехом.

Это мой первый раз, когда я использую MSVC из Qt-creator (не то, чтобы у меня был большой опыт работы с ним), поэтому я не могу понять команду компоновки, выдаваемую qt-creator, которая включает файлы манифеста, которые я не знаю, и - по-видимому - никакие файлы или библиотеки не указаны явно в команде:

link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST /MANIFESTFILE:debug\myproject.exe.embed.manifest /OUT:debug\myproject.exe @C:\Users\myuser\AppData\Local\Temp\myproject.exe.4260.531.jom

Обратите внимание, что если я не использую qmake и скомпилирую этот пример вручную, используя cl и link, программа линкуется просто отлично. Для этого я использую команды:

cl /MT /EHsc /c main.cpp 
link /LIBPATH:C:\Users\myuser\myproject libsomelib.lib main.obj  /out:test.exe

Как я могу это исправить? Заранее спасибо!


person AkiRoss    schedule 05.06.2014    source источник
comment
Может быть, использовать обратную косую черту в C:/Users/myuser/myproject?   -  person vahancho    schedule 05.06.2014
comment
В документации @vahancho qmake говорится, что это будет исправлено автоматически, но я также пробовал это, и это бесполезно :(   -  person AkiRoss    schedule 05.06.2014
comment
Нет необходимости указывать ни расширение .lib, ни префикс lib (на платформах UNIX). Так что в вашем случае -llibsomelib правильно. Это не решает проблему, а только говорит вам о ней.   -  person Matthias    schedule 05.06.2014


Ответы (1)


Каким-то образом мне удалось скомпилировать код с помощью MSVC.

Я попытался воспроизвести компиляцию на Qt-Creator, но безуспешно; также попытался экспортировать проект qmake из VS с помощью надстройки Qt, но проблема сохраняется в создателе qt. Поэтому я сдаюсь и продолжаю использовать VS для компиляции.

person AkiRoss    schedule 06.06.2014