我想在 Ubuntu 操作系统下使用 SFML 和 C++。我使用 cmake 创建两个调试/发布共享库 ( by this tutorial )
我可以编译并链接我的测试应用程序,而无需提供有关路径的任何信息。所以我认为标准路径一切都好
g++ -c main.cpp
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
但是当我现在用 ./sfml-app 启动我的应用程序时,它说
./sfml-app: error while loading shared libraries: libsfml-graphics.so.2: cannot open shared object file: No such file or directory
这让我很困惑。因为我认为/usr/local/lib是标准路径并且当我在编译时添加这个路径
g++ main.o -o sfml-app -L /usr/local/lib -lsfml-graphics -lsfml-window -lsfml-system
它有效。但它也应该在不使用 -L 提供信息的情况下工作
那么问题可能是什么?我在重新安装 Ubuntu 之前已经做了这个。在我的旧系统上它运行良好,可以通过 ./终端并双击启动我的应用程序。
当我在控制台中添加
导出 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_LIBRARY_PATH=$PATH:/usr/local/lib
.
关于c++ - 编译有效,启动不是 - "standard path"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673871/