我正在使用 C++ 和 Qt Creator 进行编程。我需要在我的项目文件夹中包含我正在使用的库,以便可以在任何设备上实现该程序。我该怎么做?
我知道我应该修改.pro
文件并且我已经尝试过:
LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \
但它不起作用。我收到此错误:加载共享库时出错:libvl.so:无法打开共享对象文件:没有这样的文件或目录
有任何想法吗??谢谢
我正在使用 C++ 和 Qt Creator 进行编程。我需要在我的项目文件夹中包含我正在使用的库,以便可以在任何设备上实现该程序。我该怎么做?
我知道我应该修改.pro
文件并且我已经尝试过:
LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \
但它不起作用。我收到此错误:加载共享库时出错:libvl.so:无法打开共享对象文件:没有这样的文件或目录
有任何想法吗??谢谢
首先,在 Linux 上,qmake 会生成用于控制构建过程的 Makefile。添加行时
LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl
对于您的.pro
文件,qmake 将确保生成适当的 Makefile 目标,该目标告诉链接器在链接可执行文件时搜索其他库$$_PRO_FILE_PWD_/libs
并链接到库。libvl.so
但是,您遇到的是运行时问题。更具体地说,ld-linux.so.2
将尝试查找并动态加载共享库,例如libvl.so
在运行时。这在加载可执行文件时使用内置路径发生,例如/usr/lib
用户定义的(和/或分发定义的)路径。我请您参考相应的手册页ld-linux.so.2
和手册页,用于ldconfig
以标准方式配置用户定义的库搜索路径。
当ld-linux.so.2
尝试查找库时,它会按以下顺序搜索一组定义明确的目录(全部以冒号分隔):
DT_RPATH
的 ,可以将其写入可执行库(已弃用)。LD_LIBRARY_PATH
至少对于大多数可执行文件,请参阅手册页以了解例外情况)DT_RUNPATH
取代DT_RPATH
(如果有的话)但将查找延迟到处理完之后LD_LIBRARY_PATH
。RPATH
和RUNPATH
可用于模拟 Windows 上的行为,其中还搜索可执行文件的路径。LD_LIBRARy_PATH
但是,更适合此目的。/etc/ld.so.cache
是通过ldconfig
使用中指定的目录/etc/ld.so.conf/
和可能的附加文件生成的,这些文件通过包含直接引用ld.so.conf
或以其他方式指定/lib
以及/usr/lib
如果上面提到的路径都不包含适当的共享对象,您将收到无法加载的错误ld-linux.so.2
。
您的解决方案很简单,而且种类繁多:
LD_LIBRARY_PATH
使用 . 设置环境变量export LD_LIBRARY_PATH={yourSearchPaths}
。LD_LIBRARY_PATH
到可执行文件的调用中,例如LD_LIBRARY_PATH={yourSearchPaths} ./{executable}
start.sh
,它会为您执行上述操作,然后只需执行 shell-script./start.sh