Poco PropertyFileConfiguration在Qt中未定义引用

时间:2016-03-16 08:46:52

标签: c++ qt reference undefined poco-libraries

目前正在开发一个Qt项目,我也想使用Poco库的某些方面,例如属性文件配置功能。我在这里的文档第9页的代码中得到了示例: http://pocoproject.org/slides/180-Configuration.pdf

问题是在编译时会出现一些相当奇怪的格式化的未定义引用错误。

C:\projects\build-InternetofGauges-Desktop_Qt_5_5_1_MinGW_32bit-Debug\debug\webtunnelhandler.o:-1: In function `ZN16WebTunnelHandler13setConfigFileEv':
C:\projects\InternetofGauges\webtunnelhandler.cpp:41: error: undefined reference to `_imp___ZN4Poco4Util25PropertyFileConfigurationC1ERKSs'
C:\projects\InternetofGauges\webtunnelhandler.cpp:43: error: undefined reference to `_imp___ZNK4Poco4Util21AbstractConfiguration6getIntERKSs'
C:\projects\build-InternetofGauges-Desktop_Qt_5_5_1_MinGW_32bit-Debug\debug\webtunnelhandler.o:-1: In function `ZN4Poco7AutoPtrINS_4Util25PropertyFileConfigurationEEptEv':
C:\My-Devices-SDK\include\Poco\AutoPtr.h:190: error: undefined reference to `_imp___ZN4Poco20NullPointerExceptionC1Ei'
C:\My-Devices-SDK\include\Poco\AutoPtr.h:190: error: undefined reference to `_imp___ZN4Poco20NullPointerExceptionD1Ev'
collect2.exe:-1: error: error: ld returned 1 exit status

我的.pro文件

QT += core
QT += network
QT += sql
QT += xml
QT -= gui

CONFIG += c++11

TARGET = InternetofGauges
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

INCLUDEPATH += "C:\\My-Devices-SDK\\include" \
               "C:\\OpenSSL\\MinGW\\include"

LIBS += -L"C:\\My-Devices-SDK\\lib\\" \
            -lPocoUtild \
            -lPocoNetd \
            -lPocoNetSSLd \
            -lPocoFoundationd \
            -lPocoJSONd \
            -lPocoWebTunneld \
            -lPocoXMLd
LIBS += -L"C:\\My-Devices-SDK\\lib\\" \
            -lPocoUtil \
            -lPocoNet \
            -lPocoNetSSL \
            -lPocoFoundation \
            -lPocoJSON \
            -lPocoWebTunnel \
            -lPocoXML
LIBS += -L"C:/OpenSSL/MinGW/lib/"

SOURCES += main.cpp \
    webclient.cpp \
    startuphandler.cpp \
    webtunnelhandler.cpp

DISTFILES += \
    Todo.readme

HEADERS += \
    webclient.h \
    startuphandler.h \
    webtunnelhandler.h

有问题的问题代码

#include <Poco/Util/PropertyFileConfiguration.h>
#include <Poco/AutoPtr.h>

#include "webtunnelhandler.h"

using Poco::AutoPtr;
using Poco::Util::PropertyFileConfiguration;

/* ... */


void WebTunnelHandler::setConfigFile()
{

  AutoPtr<PropertyFileConfiguration> pConf;
  pConf = new PropertyFileConfiguration("WebTunnelAgent.properties");//Error appears here

  int key1 = pConf->getInt("webtunnel.httpPort");//and also here

  return;
}

现在,我已经使用MinGW编译了所有poco库,并且还为MinGW配置了Qt,并且编译并运行我的程序的其他部分。我也很高兴使用Qt 5.5.1和3.1.6 Qt Creator。不幸的是,我对Qt的快乐并没有帮助我解决问题。

我已经查看了许多关于类似主题的堆栈溢出问题,并尝试重新编译库以及明确地将这些库包含在.pro文件中。我也偷看了Auto.h文件,发现最终调用空指针异常可能是由于行pConf = new PropertyFileConfiguration("WebTunnelAgent.properties");对我生气。

此错误的原因是什么?如何修复此错误?

2 个答案:

答案 0 :(得分:0)

好的,所以我确实设法解决了这个问题。我意识到库的顺序确实很重要,因为在这种情况下库之间存在一些依赖关系。我还必须添加另一个特定于Windows的库以使其工作。这是工作的.pro文件的部分

LIBS += -L"C:\\My-Devices-SDK\\lib\\" \
            -lPocoUtild \
            -lPocoNetd \
            -lPocoNetSSLd \
            -lPocoXMLd \
            -lPocoJSONd \
            -lPocoWebTunneld \
            -lPocoFoundationd

LIBS += -L"C:\\My-Devices-SDK\\lib\\" \
            -lPocoUtil \
            -lPocoNet \
            -lPocoNetSSL \
            -lPocoXML \
            -lPocoJSON \
            -lPocoWebTunnel \
            -lPocoFoundation

LIBS += -L"C:/OpenSSL/MinGW/lib/"

win32:LIBS += -lIphlpapi

正如我上面所说的那样,需要Iphlpapi和poco订单。希望这最终有助于某人!

答案 1 :(得分:0)

链接图书馆matters的顺序与Poco无关:

  

链接器搜索并处理库中的库和目标文件   他们是指定的。因此,'foo.o -lz bar.o'搜索库   文件foo.o之后但在bar.o之前的'z'。如果bar.o指的是函数   在'z'中,可能无法加载这些函数。