c++ - 编译有效,启动不是 - "standard path"?

标签 c++ linux ubuntu g++ sfml

我想在 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/

相关文章:

使用模板定义多个函数的 C++ 通用方法

c++ - 如何在C++中正确继承基类并覆盖虚函数

c++ - 关闭文件时会出现错误吗?

linux - iptables中表的意义

php - Composer 忽略 $COMPOSER_HOME

jquery - HTML 文件属性问题

c++ - 在 C++ 中以编程方式打开文档

linux - 如何在 Bash 中对齐空格分隔表的列?

linux - 如何制作从进程中分离然后重新附加到它的bash脚本?

Eclipse 没有启动