我将 Ubuntu 14.04 从 12.04 升级到 dist-upgrades。我进行了很多手动安装,例如ffmpeg,库库等等,过去都是这样。我现在有一个不错的自定义发行版,它运行良好,但我在尝试编译应用程序时遇到了问题。我遇到的错误教会了我很多东西,我找到了如何处理链接器错误的方法,我在下面列出了其中一些:
如何修复 pkg-prog-pkg-config-命令未找到错误
pkg-config-modversion-glib-2-0-报告-旧版本
如何修复 libgmodule-2-0-so-0-无法读取符号无效操作错误
多个 ffmpeg 库路径-如何排除较旧的 ffmpeg 安装
我甚至在编译原生 Ubuntu 应用程序时也会遇到错误,例如统一(我想嵌入统一启动器进入开罗码头 cairo dock 中的 unity 启动器)
我该如何修复这些库冲突?我丢失了手动编译的应用程序的目录,所以我没有机会运行make uninstall
。
我对调整库路径感到厌烦。你对我在这方面有什么建议吗?
答案1
/usr/local
这里的主要问题是Precise (12.04) 中编译的库和包含项的存在。
在搜索 指定的开发头文件时#include
,gcc
和在列表中的位置高于g++
。因此,如果您在和中都有库的开发头文件,则将使用中的那个,/usr/local/include
/usr/include
/usr/local/include
/usr/include
/usr/local/include
无论版本如何。虽然这在 Precise 中可能没问题,因为本地编译的库可能是较新的版本,但在 Trusty 中就不行了,因为库的系统版本与您安装的库的版本相同或较新。此外,随着系统库的更改,SONAME 也会更改,本地编译的库必须重新编译。因此,gcc
/g++
将使用较旧的版本,并可能抱怨缺少符号和/或链接错误。
如果主存储库中存在某个库,通常建议使用该库,而不是自己编译它(除非你需要您可以使用库的较新版本来开发或修复错误);这样,当您升级系统时,该库也会更新,并重新编译以正确链接到其他库。