我正在使用带有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
答案 0 :(得分:1)
您的.pro文件仅为unix平台unix:!macx:
定义库依赖项。我想Windows也应该有win32
。
答案 1 :(得分:0)
刚才有同样的问题。在macOS / OSX上构建正常,但在具有相同代码库的Windows上无法正常运行。
这是由于我没有导出符号所致,这在Windows上是必需的。
在构建库时在函数上使用Q_DECL_EXPORT
。
在使用库中的功能时,请使用Q_DECL_IMPORT
。
解决了我的问题,希望对您有所帮助!