为啥在将 liblas 链接到 Qt 后出现未定义的参考错误?

Posted

技术标签:

【中文标题】为啥在将 liblas 链接到 Qt 后出现未定义的参考错误?【英文标题】:Why i am in getting undefined refrence error after linking liblas to Qt?为什么在将 liblas 链接到 Qt 后出现未定义的参考错误? 【发布时间】:2017-10-06 07:35:15 【问题描述】:

我正在尝试将 liblas 库链接到 Qt。我正在使用 .pro 文件中的以下代码来链接它。

    //////////////code to link liblas to Qt/////////////////////////////////   
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -lliblas
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -lliblas
    else:unix: LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -lliblas

    INCLUDEPATH += $$PWD/../../../../OSGeo4W/include
    DEPENDPATH += $$PWD/../../../../OSGeo4W/include

    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -llaszip
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -llaszipd
    else:unix: LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -llaszip

    INCLUDEPATH += $$PWD/../../../../OSGeo4W/include
    DEPENDPATH += $$PWD/../../../../OSGeo4W/include
 ///////////////////////////////////////////////////////////////   
    and when i am running the code given below, I am getting undefined reference error
        ifstream stream;
        stream.open("lidar_sample.las", std::ios::in | std::ios::binary);
        ReaderFactory f;
        Reader reader = f.CreateWithStream(stream);
    error: undefined reference to `liblas::ReaderFactory::CreateWithStream(std::istream&)'

【问题讨论】:

【参考方案1】:

这里只有两个可能的答案。

    链接器找不到您的 liblas 您的 liblas 不是 与您的标题相同的版本。

【讨论】:

但是当我将它们包含在我的 .cpp 中时,我得到了所有 liblas 头文件 头文件来自这一行: INCLUDEPATH += $$PWD/../../../../OSGeo4W/include ,库来自这一行: else:unix: LIBS += -L$$PWD/../../../../OSGeo4W/lib/ -lliblas - 验证它们确实是正确的。 好的,明白了。但是我如何检查你提到的第二种可能性。 如果你在linux上,在库上运行nm工具,看看它是否确实有你正在调用的方法。 我在 Windows 上

以上是关于为啥在将 liblas 链接到 Qt 后出现未定义的参考错误?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV2.4.9 With Qt5.3.1 开发环境配置问题解决篇

OpenCV2.4.9 Qt5.3.1 开发环境配置错误原因与解决方案

为啥即使在包含 math.h 并使用 -lm 链接到数学库之后我也会收到“未定义的符号:.sqrtf”

为啥 ld 在将可执行文件链接到 a 时需要 -rpath-link 以便需要另一个 so ?

[Qt Quick 踩坑] QML端函数参数未定义

为啥在将 ArrayList 值加载到其中后 HashMap 不打印?