Ошибка: undefined reference to QtCreator
Пишу свою статическую библиотеку, в ней использую библиотеку loping, ниже будет показано, как я это делаю. Библиотека собирается, а вот когда хочу её потестить на каком нибудь проекте выдает ошибки /home/danila/Qt/Projects/ADTLib/LIN/ADTNode.cpp:-1: ошибка: undefined reference to `ping_construct' и т.д. на каждую функцию из loping. Как такое можно исправить. Ниже приведен код pro файлов
pro файл моей библиотеки
QT -= gui
TEMPLATE = lib
CONFIG += staticlib
CONFIG += c++11
CONFIG += adtlib
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
win32 {
SOURCES += WIN\ADTComponent.cpp
SOURCES += WIN\ADTNode.cpp
LIBS += -lws2_32
LIBS += -liphlpapi
}
unix {
SOURCES += LIN/ADTComponent.cpp
SOURCES += LIN/ADTNode.cpp
LIBS += -loping
}
HEADERS += \
include/ADTComponent.h \
include/ADTNode.h
# Default rules for deployment.
unix {
target.path = $$[QT_INSTALL_PLUGINS]/generic
}
!isEmpty(target.path): INSTALLS += target
pro файл проекта в котором тестирую либу
QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
INCLUDEPATH += /home/danila/Qt/Projects/ADTLib/include
LIBS += /home/danila/Qt/Projects/build-ADTLib-Desktop_Qt_5_12_2_GCC_64bit-Release/libADTLib.a
реализация функции которая использует функции из oping - относится к моей либе
bool pingToHost(QString host)
{
bool res = false;
pingobj_t *pingobj = ping_construct();
int timeout = 4;
for (;;)
{
double timeout_sec = ((double)timeout)/(double)(1000.0);
if (ping_setopt(pingobj, PING_OPT_TIMEOUT, &timeout_sec))
break;
if (ping_host_add(pingobj, host.toStdString().c_str()))
break;
if (ping_send(pingobj) <= 0)
break;
res = true;
break;
}
ping_destroy(pingobj);
return res;
}
ну и пример как проверяю
#include <QCoreApplication>
#include <ADTNode.h>
#include <ADTComponent.h>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
pingToHost("127.0.0.1");
return a.exec();
}
Ответы (1 шт):
Автор решения: user7860670
→ Ссылка
oping(и прочие динамические зависимости вашей библиотеки) прилинковать к проекту, который использует вашу статическую библиотеку, так как к статической бибилиотеки ничего прилинковать нельзя, ведь это просто пачка объектных файлов, а не исполняемый модуль.- собрать
opingкак статическую библиотеку и объединить с вашей