Я много часов искал ответ на свое решение, и почти во всех случаях ответ был просто: библиотека не был добавлен в PATH в файле .pro. Я на 99% уверен, что все сделал правильно, но что-то заставляет меня получать ошибку «Неопределенная ссылка» при попытке вызвать любую функцию в этой библиотеке. Вот что у меня есть на данный момент.
Библиотека –
MathLibraryH.h:
Код: Выделить всё
#pragma once
namespace MathLibrary
{
class Functions
{
public:
// Returns a + b
double Add(double a, double b);
// Returns a * b
double Multiply(double a, double b);
// Returns a + (a * b)
double AddMultiply(double a, double b);
};
}
Код: Выделить всё
#include "stdafx.h"
#include "MathLibraryH.h"
namespace MathLibrary
{
double Functions::Add(double a, double b)
{
return a + b;
}
double Functions::Multiply(double a, double b)
{
return a * b;
}
double Functions::AddMultiply(double a, double b)
{
return a + (a * b);
}
}
TestQTProject.pro:
Код: Выделить всё
QT += core gui \
network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = TestQTProject
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp \
HEADERS += \
mainwindow.h \
FORMS += \
mainwindow.ui
DISTFILES += \
com_github_msorvig_s3.pri
LIBS += -L$$PWD/../Libs -lMathLibrary
INCLUDEPATH += $$PWD/../Incs
Код: Выделить всё
#include "MathLibraryH.h"
// .... other stuff ....
void MainWindow::on_btnStage1_clicked()
{
MathLibrary::Functions lib; // This is just fine
lib.Add(5, 9); // The "Add" function (or any other function in the library)
causes an undefined reference error
}
Другие вещи, которые я пробовал на основе ответов поиска:
Добавление следующего кода в MathLibrary.h:
Код: Выделить всё
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif
Мульти- строка:
Код: Выделить всё
LIBS += -L$$PWD/../Libs
LIBS += -lMathLibrary
Код: Выделить всё
LIBS += -LC:\svn\software\WIP\TestQTProject\Libs -lMathsLibrary
Что бы это ни стоило, библиотека отлично работает в любом проекте, созданном с помощью Visual Studio, и я пробовал создать как статическую, так и динамическую библиотеку.
Подробнее здесь: https://stackoverflow.com/questions/483 ... -library-b