安装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。
答案 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
环境变量,因为它现在是标准库。