编译作品,开始不是“标准路径”? 我想在Ubuntu OS下使用C++实现SFML。我使用cmake创建了两个调试/发布共享库

编译作品,开始不是“标准路径”? 我想在Ubuntu OS下使用C++实现SFML。我使用cmake创建了两个调试/发布共享库,c++,linux,ubuntu,g++,sfml,C++,Linux,Ubuntu,G++,Sfml,我可以编译和链接我的测试应用程序,而不提供任何关于路径的信息。所以我认为标准路径的一切都是好的 g++-c main.cpp g++main.o-osfml应用程序-lsfml图形-lsfml窗口-lsfml系统 但是当我现在用./sfml应用程序启动我的应用程序时,它说 ./sfml应用程序:加载共享库时出错: libsfml graphics.so.2:无法打开共享对象文件:没有此类文件或 目录 这让我很困惑。因为我认为/usr/local/lib是标准路径,当我在编译过程中添加此路径时 g

我可以编译和链接我的测试应用程序,而不提供任何关于路径的信息。所以我认为标准路径的一切都是好的

g++-c main.cpp

g++main.o-osfml应用程序-lsfml图形-lsfml窗口-lsfml系统

但是当我现在用./sfml应用程序启动我的应用程序时,它说

./sfml应用程序:加载共享库时出错: libsfml graphics.so.2:无法打开共享对象文件:没有此类文件或 目录

这让我很困惑。因为我认为/usr/local/lib是标准路径,当我在编译过程中添加此路径时

g++main.o-osfml应用程序-L/usr/local/lib-lsfml图形 -lsfml窗口-lsfml系统

它起作用了。但它也应该在不使用-L提供信息的情况下工作

那么问题出在哪里呢?我在重新安装Ubuntu之前做过这个。在我的旧系统上,它运行良好,可以通过./terminal启动我的应用程序,还可以双击

当我在控制台中添加

导出LD_LIBRARY_PATH=$PATH:/usr/local/lib

我可以从控制台启动应用程序。但只有在具体的一个。我希望应用程序总是通过双击启动,而不仅仅是从终端启动。如何在系统范围内添加库?

您需要将/usr/local/lib添加到/etc/ld.so.conf.d/中的文件中,然后调用ldconfig来重建其缓存

一种方法是:

sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/usrlocal'
sudo ldconfig
然后您应该能够在不使用-L/usr/local/lib的情况下编译,也不使用export-LD\u-LIBRARY\u-PATH=$PATH:/usr/local/lib。

您需要将/usr/local/lib添加到/etc/LD.so.conf.d/中的文件中,然后调用ldconfig来重建其缓存

一种方法是:

sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/usrlocal'
sudo ldconfig
然后您应该能够在不使用-L/usr/local/lib的情况下编译,也不使用export LD_LIBRARY_PATH=$PATH:/usr/local/lib