c++ - Qt Creator 中带有 mingw 的共享库给出 undefined reference 错误

标签 c++ qt qt-creator

已解决。当我将我的库添加为普通内部库时,一切都很好。我没有做的是在命名空间中定义的一些自由函数上使用 MY_LIBRARY_EXPORT 宏。我以某种方式操纵库导入以使这些功能正常工作,但它以此处所述的其他方式中断。

我无法通过 Qt Creator 向导使用共享库。我试过动态链接,但失败了,也不能用作静态库。在这两种情况下,我都会收到“对 `IMP_* 的 undefined reference ”错误。

这是我的专业文件。它们都在同一个 SUB_DIR 父项目中并且路径正确。

库pro文件的相关部分:

TARGET = Prospec
TEMPLATE = lib
CONFIG += staticlib    
QMAKE_CXXFLAGS += -std=c++11    
DEFINES += PROSPEC_LIBRARY

整个用户 .pro 文件。 (ProspecTest 是 Prospec 的单元测试项目)。

#-------------------------------------------------
#
# Project created by QtCreator 2013-12-12T15:04:30
#
#-------------------------------------------------

QT       += testlib    
QT       -= gui

TARGET = prospectest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

QMAKE_CXXFLAGS += -std=c++11

SOURCES += prospectest.cpp \
    mltest.cpp \
    convertertest.cpp \
    numericitemtest.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"

HEADERS += \
    utilities.h \
    mltest.h \
    convertertest.h \
    numericitemtest.h

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../Prospec/release/ -lProspec
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../Prospec/debug/ -lProspec

INCLUDEPATH += $$PWD/../Prospec/debug
DEPENDPATH += $$PWD/../Prospec/debug

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../Prospec/release/libProspec.a
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../Prospec/debug/libProspec.a

# Boost
INCLUDEPATH += C:/boost/boost_1_55_0/
LIBS += "-LC:/boost/boost_1_55_0/stage/lib/"

编辑: undefined reference 错误只发生在我调用源文件中的功能的地方。例如,如果我构造一个库对象,我会得到错误,但如果我将该对象的构造函数移动到一个头文件中,那么编译就可以了。现在我不确定问题是由于 Qt 环境造成的,还是我不了解一般的共享库。

最佳答案

您描述的错误指向链接器错误。当未指定必要的对象/库文件时会发生这种情况。最可能的情况是:您包含一个 header 并使用该 header 中的函数,但不指定该函数是在哪个库中定义的。

小例子:

//test.c
#include <winsock.h>
int main() { gethostbyname("localhost"); }

“ undefined reference ”链接器错误:

>gcc test.c
cczICEqq.o:test.c:(.text+0x1e): undefined refer ence to `gethostbyname@4'
collect2.exe: error: ld returned 1 exit status

在这种情况下,您必须像这样指定 libwsock32.a:

gcc test.c -lwsock32

另外,请注意 libsomething.a 并不是唯一可以解析引用的地方。您可能遗漏了目标文件。

很遗憾,没有更多细节,我无法告诉您确切的问题。

关于c++ - Qt Creator 中带有 mingw 的共享库给出 undefined reference 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555762/

相关文章:

c++ - 另一个小内存 C++ 问题

c++ - 如何防止为未实现方法的对象生成模板

c++ - 在派生类中使用复制分配

c++ - 如何运行在启动时运行的 Qt 应用程序?

c++ - 如何使用QColumnView显示多列数据

qt - 带有 QtCreator 的 Ubuntu 12.04 上的 OpenCV 2.4

c++ - 警告C26451:算术溢出(当减去两个整数时)

c++ - QT中的槽队列

python - QTableView 未在 dataChanged 上更新

c++ - Qt - 在 GUI 中从计算机加载图像