我正在尝试从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
中,这些是文件
共享对象文件在哪里?
答案 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