将库包括到我的项目文件夹中 我用C++和Qt Creator编程。我需要在我的项目文件夹中包含我正在使用的库,以便该程序可以在任何设备上实现。我该怎么办

将库包括到我的项目文件夹中 我用C++和Qt Creator编程。我需要在我的项目文件夹中包含我正在使用的库,以便该程序可以在任何设备上实现。我该怎么办,c++,qt-creator,libraries,C++,Qt Creator,Libraries,我知道我应该修改.pro文件,我已经试过了: LIBS+=-L"$$_PRO_FILE_PWD_/libs" \ -lvl \ 但它不起作用。我得到这个错误: 加载共享库时出错:libvl.so:无法打开共享对象文件:没有这样的文件或目录 有什么想法吗?? 谢谢首先,在Linux上,qmake生成用于控制构建过程的makefile。当您添加行时 LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl 对于.pro文件,qmake将确保生成适当的Makefile目标,该目标告

我知道我应该修改
.pro
文件,我已经试过了:

LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \
但它不起作用。我得到这个错误: 加载共享库时出错:libvl.so:无法打开共享对象文件:没有这样的文件或目录

有什么想法吗??
谢谢

首先,在Linux上,qmake生成用于控制构建过程的makefile。当您添加行时

LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl
对于
.pro
文件,qmake将确保生成适当的Makefile目标,该目标告诉链接器在
$$\u pro\u file\u PWD\u/libs
中搜索其他库,并在链接可执行文件时链接到库
libvl.so

但是,您遇到的是运行时问题。更具体地说,
ld linux.so.2
将尝试在运行时查找并动态加载共享库,如
libvl.so
。加载可执行文件时,使用内置路径(如
/usr/lib
和用户定义(和/或分发定义)路径实现此操作。请参阅对应的for
ld linux.so.2
和for
ldconfig
,它们用于以标准方式配置用户定义的库搜索路径

ld linux.so.2
尝试查找库时,它会按以下顺序搜索一组定义良好的目录(以冒号分隔):

  • 如果存在所谓的
    DT_RPATH
    ,可以将其写入可执行库(已弃用
  • LD_LIBRARY_路径
    (至少对于大多数可执行文件,请参阅手册页了解例外情况)
  • DT_运行路径
    ,它取代了
    DT_RPATH
    (如果有的话),但将查找延迟到处理完
    LD_库路径
    之后。
    RPATH
    RUNPATH
    可以用来模拟Windows上的行为,在Windows上也会搜索可执行文件的路径<然而,code>LD_LIBRARy_PATH更适合于此目的
  • 缓存文件
    /etc/ld.so.cache
    中存在的库名,该文件是由
    ldconfig
    使用
    /etc/ld.so.conf/
    中指定的目录生成的,也可能是通过包含在
    ld.so.conf
    中直接引用或以其他方式指定的其他文件
  • 受信任的目录,
    /lib
    /usr/lib
如果上面提到的任何路径都不包含适当的共享对象,您将得到一个错误,即
ld linux.so.2
无法加载该对象

您的解决方案很简单,有多种:

  • 在执行程序之前,请使用
    export LD\u LIBRARY\u PATH={yourSearchPaths}
    设置
    LD\u LIBRARY\u PATH
    环境变量
  • LD_LIBRARY_PATH
    添加到命令行上可执行文件的调用中,例如
    LD_LIBRARY_PATH={yourSearchPaths}./{executable}
  • 提供一个可执行的启动shell脚本,例如
    start.sh
    ,它为您执行上述操作,然后只需执行shell脚本
    /start.sh

到底是什么问题?编译器没有找到libs吗?如果
lvl
是一个库,您需要添加一个
-l
前缀,才能将其实际添加到要链接的库列表中。它会出现以下错误:加载共享库时出错:libvl.so:无法打开共享对象文件:没有此类文件或directory@thokra是的,我已经在我的程序中使用了-lvl,但是当我将复制粘贴到论坛中时,它已经不存在了:DI更正question@triple13:嗯,显然liblv不在
$\u PRO\u FILE\u PWD\u/libs
上。发布一条消息并打印路径,然后检查该字段是否存在于您希望它存在的位置。没有评论就投票的人是怎么回事?@thokra..非常感谢您的详细解释..我将.pro文件中的行更改为:'LIBS+=-L“$$PWD/LIBS”-lvl'但它不起作用..我在另一台设备上尝试了整个项目..令人惊讶的是..它工作得非常完美..尽管两台设备中的一切都是一样的..也许只是QT Creator版本不同..无论如何,非常感谢:)@triple13:你对设备的意思是什么?此外,QtCreator只需解析
.pro
文件,就可以相应地在IDE中执行操作。QtCreator在构建时或运行时不参与(除了启动可执行文件并可能指定工作目录之外)。@thokra..所说的设备是指另一台机器..另一台计算机..我尝试了同一个项目,它成功了