libSDL2-2.0.so.0:无法打开共享对象文件

时间:2015-04-18 00:04:53

标签: c++ c linux shared-libraries sdl-2

我正在尝试从source code构建SDL库。我已经下载了压缩文件(即SDL2-2.0.3.tar.gz)并将其解压缩。我不想在/usr/local中安装文件。根据{{​​3}},我需要更改configure

  

最后一个命令说“sudo”所以我们可以把它写到/ usr / local(通过   默认)。您可以将其更改为其他位置    - 配置脚本的--prefix选项。事实上,有很多很好的选项可供配置使用!一定要看看它   --help选项了解详情。

这就是我所做的。

mkdir build
cd build
../configure
make
sudo make install

我创建的install文件夹中包含以下文件

share 
lib
include 
bin

现在我想运行测试文件。我选择了这个testatomic.c,这是命令行 gcc testatomic.c -o test -I/home/xxxx/Desktop/SDL2-2.0.3/install/include/SDL2 -L/home/xxxx/Desktop/SDL2-2.0.3/install/lib -lSDL2 -lSDL2main

我收到此错误

error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory

lib中,这些是文件

enter image description here

共享对象文件在哪里?

3 个答案:

答案 0 :(得分:6)

运行生成的程序时出错,因为系统的动态链接器无法找到所需的库。程序需要libSDL2-2.0.so.0,链接器在系统定义的目录中查找它(/lib/usr/lib,..., - 在/etc/ld.so.conf中定义),但找不到 - 因此错误。

要通知链接器您希望它在哪里查找库,您可以定义LD_LIBRARY_PATH环境变量,例如在你的情况下:

export LD_LIBRARY_PATH="$HOME/Desktop/SDL2-2.0.3/install/lib"
./test

其他方法是在标准位置安装库,在.bashrc(或您使用的任何shell)中定义LD_LIBRARY_PATH,或使用rpath,例如:在编译行的末尾添加-Wl,-rpath=$HOME/Desktop/SDL2-2.0.3/install/lib

答案 1 :(得分:0)

我也有:

  

./ 01_hello_SDL:加载共享库时出错:libSDL2-2.0.so.0:无法打开共享对象文件:没有这样的文件或目录

作为Lazy Foo教程的一部分编译第一个C ++程序(使用SDL头文件)的结果。我发现libSDL2-2.0.so.0只是在GUI中使用了find命令。原来是/usr/local/lib

然后在终端我输入:

export LD_LIBRARY_PATH="/usr/local/lib"

我使用:

检查了LD_LIBRARY_PATH的值
echo $LD_LIBRARY_PATH

我重新编译(不知道是否有必要)瞧,它有效。

答案 2 :(得分:0)

我能够通过以下方式解决此问题:

sudo apt install libsdl2-dev