对自己的库函数

时间:2015-04-30 09:56:49

标签: c++ qt gcc mingw static-libraries

我正在使用带有2个项目的QT(5)-Creator,它们在Windows 7下使用MinGW我的C ++程序进行编译。一个项目生成一个静态库,另一个项目用于验证库是正常的。

错误:

构建库时,不会生成错误,并且会成功创建静态库MyClassName.a

反过来,在尝试导入库时,我会在构建/编译时收到错误消息:

undefined reference to 'MyClassName::MyClassName()'
undefined reference to 'MyClassName::MyClassFunction()'

文件:

这是我的导入程序项目的 main.cpp

#include <QCoreApplication>
#include "MyClassName.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MyClassName *mainThread = new MyClassName();
    mainThread->MyClassFunction();

    return a.exec();
}

和它的.pro文件

QT       += core
QT       += widgets
QT       -= gui

TARGET = TESTerase
CONFIG   += console
CONFIG   -= app_bundle
CONFIG   +=extserialport
CONFIG   +=staticlib

TEMPLATE = app

HEADERS += \
    MyClassName.h

SOURCES += main.cpp    

unix:!macx: LIBS += -L$$PWD/../MyClassName-Release/ -lMyClassName

INCLUDEPATH += $$PWD
INCLUDEPATH += $$PWD/../MyClassName-Release/release
DEPENDPATH += $$PWD/../MyClassName-Release/release

unix:!macx: PRE_TARGETDEPS += $$PWD/../MyClassName-Release/release/MyClassName.a

btw我使用过QT-Creator 包含外部库功能

我的猜测:

  • 由于我能够[Strg + Click]主要功能,我认为链接器会抛出错误。

  • 它也可能是一种导入/创建/使用库的方式,因为我刚开始使用该主题。

无论如何在互联网上搜索它通常只会产生提示,为两个项目使用相同的编译器 - 这在我的情况下并不重要(因为我用同一个Creator构建两个项目并且相同的设置)。

有人有想法吗?

感谢您的支持

亲切的问候

[波格丹请求更新] 新的.pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2015-04-29T19:46:22
#
#-------------------------------------------------

QT       += core
QT       += widgets

QT       -= gui

TARGET = TESTerase

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

HEADERS += \
    MyClassName.h

SOURCES += main.cpp

unix:!macx: LIBS += -L$$PWD/../MyClassName-Release/ -lMyClassName



win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../MyClassName-Release/release/ -lMyClassName
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../MyClassName-Release/debug/ -lMyClassName
else:unix:!macx: LIBS += -L$$PWD/../MyClassName-Release/ -lMyClassName

INCLUDEPATH += $$PWD/../MyClassName-Release/release
DEPENDPATH += $$PWD/../MyClassName-Release/release

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../MyClassName-Release/release/MyClassName.a
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../MyClassName-Release/debug/MyClassName.a
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../MyClassName-Release/release/MyClassName.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../MyClassName-Release/debug/MyClassName.lib
else:unix:!macx: PRE_TARGETDEPS += $$PWD/../MyClassName-Release/MyClassName.a

2 个答案:

答案 0 :(得分:1)

您的.pro文件仅为unix平台unix:!macx:定义库依赖项。我想Windows也应该有win32

答案 1 :(得分:0)

刚才有同样的问题。在macOS / OSX上构建正常,但在具有相同代码库的Windows上无法正常运行。

这是由于我没有导出符号所致,这在Windows上是必需的。

在构建库时在函数上使用Q_DECL_EXPORT。 在使用库中的功能时,请使用Q_DECL_IMPORT

此处的示例示例:https://wiki.qt.io/How_to_create_a_library_with_Qt_and_use_it_in_an_application#Creating_a_shared_library

解决了我的问题,希望对您有所帮助!