“符号查找错误:...:未定义符号”(Qwt)我应该设置LD_LIBRARY_PATH吗?

时间:2015-10-08 17:27:59

标签: linux qt qwt

安装qwt-6.1.2.zip之后,我在

看到了它
/usr/local/qwt-6.1.2/lib/libqwt.so

我正在开发的Qt应用依赖于,所以.pro具有以下内容:

    INCLUDEPATH += "/usr/local/qwt-6.1.2/include"
    LIBS += -L"/usr/local/qwt-6.1.2/lib"
    CONFIG(debug, debug|release) {
        LIBS += -lqwtd
    } else {
        LIBS += -lqwt
    }

它编译得很好,但执行(在QtCreator之外)给出了:

"symbol lookup error: ...: undefined symbol"

通过以下方式解决了这个问题:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qwt-6.1.2/lib
export LD_LIBRARY_PATH

如果我理解正确,LD_LIBRARY_PATH should only be set in case the .so files are in exotic (non-standard) locations。问题,/usr/local/qwt-6.1.2/lib是标准的(我猜不是)?

何时何地设置LD_LIBRARY_PATH?我认为一个选择是在安装时这样做,例如:

echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/qwt-6.1.2/lib" >> .bashrc
echo "export LD_LIBRARY_PATH" >> .bashrc

这样做的一个缺点是多次安装会多次将这些内容写入.bashrc。

我的问题与this有关,实际上我最终使用了-rpath这个想法,但我认为这里的上下文可能被视为更具体,与Qt相关,因此不重复。事实上,我最终使用了this

1 个答案:

答案 0 :(得分:1)

对于您给定的用例,似乎您不应该使用LD_LIBRARY_PATH。相反,您应该将配置文件添加到/etc/ld.so.conf.d/和运行ldconfig

例如,以root身份运行以下命令:

echo "/usr/local/qwt-6.1.2/lib" > /etc/ld.so.conf.d/qwt.conf
ldconfig

ldconfig创建动态链接程序所需的信息,以解析库所在的位置。创建的配置文件告诉ldconfig在指定目录中搜​​索要包含在其共享库数据库中的更多库。这允许程序使用共享库而无需设置LD_LIBRARY_PATH环境变量,因为它现在是标准库。