c++ - 对自己的库函数的 undefined reference

标签 c++ qt gcc mingw static-libraries

我将 QT(5)-Creator 与 2 个项目一起使用,它们都使用 MinGW 编译我的 Windows 7 下的 C++ 程序。一个项目生成一个静态库,另一个项目只是用来验证该库是否正常。

错误:

构建库时没有产生任何错误,它成功创建了静态库 MyClassName.a

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

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

文件:

这是我的 importer 项目的 ma​​in.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

顺便说一句,我使用了 QT-Creator 的包含外部库功能

我的猜测:

  • 由于我能够 [Strg+Click] 主函数中的函数,我假设错误是由链接器抛出的。

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

无论如何,在互联网上搜索它通常只会得到提示,即对两个项目使用相同的编译器——这对我来说应该无关紧要(因为我正在使用相同的创建者和相同的设置构建两个项目) .

有人有想法吗?

感谢您的支持

亲切的问候

[博格丹要求的更新] 新的 .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

最佳答案

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

关于c++ - 对自己的库函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964577/

相关文章:

c++ - Cygwin 是否支持 Gold 链接器?

c++ - 在文本编辑程序的正常流程中,我应该更新多少个字符?

android - 如何在 Debug模式下将 Qt Creator 中的 --android-platform 更改为不是 android--1?

c++11 - 当长度超过 0xF 时,硬编码字节数组最终会作为数据

c++ - 命名 vector 的 vector 导致编译器错误

c++ - 显式声明全局命名空间

c++ - 如何将变量传递给 QT 中的插槽方法?

c++ - 使用 cxxtest 框架和 valgrind 测试 qt 对象

c - gcc 中的 -ffreestanding 选项是什么?

c - 使用 dpkg-buildflags 构建一个简单的程序