@Mars36

Как подключить статическую библиотеку к проекту в QT Creator под windows?

Пробую подключить статическую библиотеку логгера P7 к своему приложению. Собрал логгер с помощью cmake по инструкции в документации, т.е.

cd *p7_folder_path*
mkdir *_build_*
cd *_build_*
cmake ..

после сборки получил несколько проектов для MCVS, собрал с помощью нее либу, на выходе получил p7.lib, подключил ее к своему проекту через менеджер creator'а выбрал внешнюю, указал путь до либы оставил галочки только для винды. В pro файл дописал путь до хедеров. В итоге pro файл выглядит так:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../logger/_build_/Sources/release/ -lp7
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../logger/_build_/Sources/debug/ -lp7

INCLUDEPATH += $$PWD/../../logger/_build_/Sources/Debug
DEPENDPATH += $$PWD/../../logger/_build_/Sources/Debug

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../logger/_build_/Sources/release/libp7.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../logger/_build_/Sources/debug/libp7.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../logger/_build_/Sources/release/p7.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../logger/_build_/Sources/debug/p7.lib

SOURCES += \
        main.cpp

INCLUDEPATH += D:/Example/logger/Headers

Так выглядит main.cpp
#include <iostream>
#include "GTypes.h"
#include "P7_Client.h"
#include "P7_Trace.h"

using namespace std;

int main()
{
    IP7_Client* l_pClient = P7_Create_Client( TM( "/P7.Sink=FileTxt" ) );

    if ( l_pClient == NULL ) {
        cout << "Error IP7_Client" << endl;
    }

    IP7_Trace* l_pTrace = P7_Create_Trace( l_pClient, TM( "Test" ) );
    l_pTrace->P7_WARNING( 0, TM( "Test" ) );
    l_pClient->Release();
    return 0;
}

IDE по идее все видит и не на что не ругается.
Но при сборке сыпятся пару десятков ошибок типа:
p7.lib(ClBaical.obj):-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ __WSAFDIsSet в функции "public: enum eSocket_Status __cdecl CUDP_Socket::Is_Ready(enum eFD_Type,unsigned int)" (?Is_Ready@CUDP_Socket@@QEAA?AW4eSocket_Status@@W4eFD_Type@@I@Z).
p7.lib(ClText.obj):-1: ошибка: LNK2001: неразрешенный внешний символ __imp_bind.

Все ошибки относятся к линковке, т.е. либо LNK2001 либо LNK2019.
Собираю либу в первый раз и возможно что то очевидное пропускаю, что не указано в документации, т.к. автором это считается очевидным.
  • Вопрос задан
  • 728 просмотров
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
Кроме линковки либы надо еще лиинковать ее зависимости.
__WSAFDIsSet например тут https://docs.microsoft.com/en-us/windows/win32/api...
LIBS += -lWs2_32
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы