gpt4 book ai didi

c++ - 在 C++ 中将库链接到 linux 二进制文件

转载 作者:行者123 更新时间:2023-12-04 19:06:35 25 4
gpt4 key购买 nike

我正在使用 g++ 编译一个 c++ 程序,我正在使用两个名为 libsdl2-dev 和 libsdl2-image-dev 的库
我使用命令在我的 ubuntu 机器上安装了这两个库apt install libsdl2-dev libsdl2-image-dev当我编译程序时,一切正常。然后我从 /usr/lib/x86_64-linux-gnu/ 复制了这些库。使用二进制文件到我的工作目录,以便能够将此文件夹提供给其他人。
当尚未安装这些库的用户尝试通过编写 ./main 来打开我的程序时,就会出现问题。 (二进制文件)。由于他没有安装这些库,他会收到类似“无法打开共享对象:没有这样的文件或目录”的错误。
发生这种情况是因为二进制文件在/usr/lib 等中查找这些库......
我需要什么
我需要我的二进制文件在同一个文件夹中查找这些库,而不是在/usr/lib/x86 等中,从我读到的内容中,我必须执行类似 rpath 的操作
使用的 IDE 是 Sublime Text,用于编译我所有文件的语法是这样的:

g++ -c src/*.cpp -std=c++14 -m64 -g -Wall -I include && g++ *.o -o bin/debug/main -lSDL2main -lSDL2 -lSDL2_image  && ./bin/debug/main`
文件夹结构
我得到了项目目录,里面还有 4 个目录,每个目录名为:bin(带有 debug 子目录,我们在其中获得最终编译)、include(带有 hpp 文件)、res(带有所有纹理)和 src编译所有cpp文件,其他文件是项目文件和.o文件
我正在使用 Ubuntu 20.04-2 LTS,其他用户的 PC 也是如此
提前感谢您的帮助!

最佳答案

这是因为加载运行时依赖项的动态链接器会在某些指定位置查找它们,这些位置“默认”是您的系统库目录(这些库由 apt 安装的位置)。
理想情况下,其他用户也应该安装这些库 (如果您构建具有适当依赖关系的 .deb 包,则可以“自动”完成)
否则,您将不得不通过添加 -Wl,-rpath='$ORIGIN' 来更改程序的运行路径。 ,这使得动态链接器在二进制文件所在的位置查找依赖项。$ORIGIN这是一个特殊的变量,意思是“这个可执行文件”,这是您想要实现的。
rpath
A description of RPATH $ORIGIN

关于c++ - 在 C++ 中将库链接到 linux 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67902499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com