【问题标题】:Compiling works, starting not - "standard path"?编译工作,开始不是 - “标准路径”?
【发布时间】:2013-07-14 11:25:50
【问题描述】:

我想在 Ubuntu OS 下将 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: 加载共享库时出错: libsfml-graphics.so.2:无法打开共享对象文件:没有这样的文件或 目录

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

g++ main.o -o sfml-app -L /usr/local/lib -lsfml-graphics -lsfml-window -lsfml-系统

它有效。但它也应该在不提供信息的情况下使用 -L

那么可能是什么问题?我在重新安装 Ubuntu 之前做了这个。在我的旧系统上它运行良好,可以通过 ./ 终端启动我的应用程序,也可以双击。

当我在控制台中添加时

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

我可以从控制台启动应用程序。但仅限于特定的一个。我希望应用程序也始终通过双击启动(不仅从终端)。如何添加“系统范围”的库?

【问题讨论】:

    标签: c++ linux ubuntu g++ sfml


    【解决方案1】:

    您需要将/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 的情况下进行编译。

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 2016-07-17
      • 2019-01-19
      • 1970-01-01
      • 2017-12-21
      • 2012-12-18
      • 2014-12-27
      • 1970-01-01
      相关资源
      最近更新 更多