У меня есть сторонняя (с закрытым исходным кодом) статическая библиотека (.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
Как я могу это исправить? Заранее спасибо!