编译工作,从不开始 - “标准路径”?

时间:2013-07-16 10:15:05

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

我想在Ubuntu OS下使用SFML和C ++。我使用cmake(by this tutorial

创建了两个调试/发布共享Libarys

我可以编译和链接我的测试应用程序,而无需提供任何有关路径的信息。所以我认为标准路径

一切都没问题
  

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-system

它有效。但它也应该在没有用-L

提供信息的情况下工作

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

当我添加控制台

export LD_LIBRARY_PATH = $ PATH:/ usr / local / lib

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

1 个答案:

答案 0 :(得分:4)

您需要将/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