首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对`_imp___ZN10HTTPClient5abortEv‘和其他未定义的引用

对`_imp___ZN10HTTPClient5abortEv‘和其他未定义的引用
EN

Stack Overflow用户
提问于 2014-04-28 07:37:04
回答 2查看 8.2K关注 0票数 1

我正在将一个庞大的项目从Qt 4.x迁移到5,我几乎完成了,但我有错误,我无法定位,我认为这与一些库的链接有关,但我在这里有点迷失了。我希望有人能对这件事有所了解。

错误:

代码语言:javascript
复制
  ./release\addeditaton.o:addeditaton.cpp:(.text+0x6ac2): undefined reference to `_imp___ZN10HTTPClient5abortEv'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0x98c5): undefined reference to `_imp___ZN10HTTPClient3getE7QStringbb'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0x9f88): undefined reference to `_imp___ZN10HTTPClient3getE7QStringbb'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xa7a8): undefined reference to `_imp___ZN10HTTPClient3getE7QStringbb'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xa921): undefined reference to `_imp___ZN10RestClientC2E7QStringibS0_S0_S0_S0_'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xc91b): undefined reference to `_imp___ZN10HTTPClient3getE7QStringbb'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xcaa3): undefined reference to `_imp___ZN10RestClientC2E7QStringibS0_S0_S0_S0_'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xe49d): undefined reference to `_imp___ZN10HTTPClient4postE7QStringS0_b'
    ./release\addeditaton.o:addeditaton.cpp:(.text+0xfc55): undefined reference to `_imp___ZN10HTTPClient4postE7QStringS0_b'
    Makefile.Release:922: recipe for target '..\Release\Swibz.exe' failed
    c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: ./release\addeditaton.o: bad reloc address 0x20 in section `.text$_ZN10QByteArrayD1Ev[__ZN10QByteArrayD1Ev]'

项目档案:

代码语言:javascript
复制
# ----------------------------------------------------
# This file is generated by the Qt Visual Studio Add-in.
# ------------------------------------------------------

TEMPLATE = app
TARGET = Swibz
include(Swibz.pri)
DESTDIR = ../Release
QT += widgets network xml webkit webkitwidgets opengl #core gui are by default
CONFIG += release
DEFINES += _WINDOWS QT_LARGEFILE_SUPPORT QT_XML_LIB QT_OPENGL_LIB QT_NETWORK_LIB QT_DLL QWT_DLL JSON_LIB_LIB
INCLUDEPATH += ../../../SprintLib \
    ./GeneratedFiles \
    ./GeneratedFiles/Release \
    . \
    #./../../Qwt/qwt-5.2.0/src \
    ../qwt/src \
    #../../../QENC/QENC \
    ../qenc \
   # ../../../zlib-1.2.5 \
    ../zlib-1.2.5 \
    #../../../serial/qextserialport-1.2win-alpha \
    ../qextserialport-1.2win-alpha \
   # ../../../qxmpp-0.3.0/src \
    ../qxmpp/build-qxmpp-Qt_4_8_5-Debug/src \
    #../../../JSON \
    ../json/JSON \
   # ../../../QtSerialPort/qtserialport/include
    ../QtSerialPort/qtserialport/include
LIBS += -L"../../../SprintLib/release" \
    -L"../../../QENC/release" \
    -L"../../../zlib-1.2.5/contrib/vstudio/vc9/x86/ZlibDllRelease" \
    -L"../../../serial/qextserialport-1.2win-alpha/Release" \
    -L"../../../qxmpp-0.3.0/lib" \
    -L"../../../JSON/Release" \
    -L"../../../QtSerialPort/qtserialport/src/serialport/release" \
    -lopengl32 \
    -lglu32 \
    -lgdi32 \
    -luser32 \
    #-lHDP \
    -L"./libHDP.a" \
    #-l../../Qwt/qwt-5.2.0/lib/debug/qwt5 \
    #-lqenc \
    #-lzlibwapi \
    -L"./zlib1.dll" \
    #-lqextserialport \
    -lsetupapi \
    #-lqxmpp \
    -L"./libqxmpp.a" \
    #-ljson_lib \
    #-lSerialPort1
    -L"./libqextserialportd.a" \
#DEPENDPATH += .
#MOC_DIR += ./GeneratedFiles/release
#OBJECTS_DIR += release
#UI_DIR += ./GeneratedFiles
#eRCC_DIR += ./GeneratedFiles
#win32:RC_FILE = Swibz.rc

TRANSLATIONS = ln_en.ts
TRANSLATIONS = ln_lv.ts
TRANSLATIONS = ln_lt.ts
TRANSLATIONS = ln_es.ts

CODECFORTR     = UTF-8

包含addeditaton.cpp (如果需要其余代码,请告诉我,它们是930行,我认为它们与问题无关)(

代码语言:javascript
复制
#include "addeditaton.h"
#include "atonwidget.h"
#include "atoninfowidget.h"
#include "messagebox.h"

#include <QtDebug>
#include <QFileDialog>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-28 07:52:09

./release\addeditaton.o:addeditaton.cpp:(.text+0x6ac2):未定义的对`_imp___ZN10HTTPClient5abortEv的引用

这样的行文通常意味着至少有以下两个问题之一:

  • 没有安装相应的库。
  • 您所依赖的符号没有安装正确的版本。
  • 您的链接选项没有正确设置。

在这种情况下,抱怨是关于http客户端库,所以让我们首先检查您的项目文件。您在开始时正确地使用了-L-l选项,但最终没有正确使用,因此让我们澄清它们的含义:

-L是指向库的路径。

-l要么表示库名,要么表示库的绝对路径。

现在,让我们看看你在最后写了些什么,问题是:

代码语言:javascript
复制
-L"./libHDP.a" \
#-l../../Qwt/qwt-5.2.0/lib/debug/qwt5 \
#-lqenc \
#-lzlibwapi \
-L"./zlib1.dll" \
#-lqextserialport \
-lsetupapi \
#-lqxmpp \
-L"./libqxmpp.a" \
#-ljson_lib \
#-lSerialPort1
-L"./libqextserialportd.a" \

因此,您应该将其替换为以下内容:

代码语言:javascript
复制
-lHDP
#-l../../Qwt/qwt-5.2.0/lib/debug/qwt5 \
#-lqenc \
#-lzlibwapi \
-lzlib1 \
#-lqextserialport \
-lsetupapi \
#-lqxmpp \
-lqxmpp.a \
#-ljson_lib \
#-lSerialPort1 \
-lqextserialportd

或者,您也可以使用上面提到的-l选项指定静态库的绝对路径。

但是,请注意,您不应该将项目中的QtSerialPort和QextSerialPort之类的东西混为一谈。最好使用QtSerialPort。

票数 3
EN

Stack Overflow用户

发布于 2014-04-28 07:40:32

您正在对以下库使用-L选项:

代码语言:javascript
复制
-L"./libHDP.a" \
-L"./zlib1.dll" \
-L"./libqxmpp.a" \
-L"./libqextserialportd.a" \

-L指定要搜索库的目录。使用-l (小写)指定库。如果要指定确切的名称,则可能需要在libarary名称之前添加冒号。例如,

代码语言:javascript
复制
-l :./libHDP.a  \
-l :./zlib1.dll \
-l :./libqxmpp.a \
-l :./libqextserialportd.a \

详情请参见https://sourceware.org/binutils/docs/ld/Options.html#Options

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23335157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档