如何修复编译过程中因源代码中手动安装的包而导致的库冲突?

如何修复编译过程中因源代码中手动安装的包而导致的库冲突?

我将 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) 中编译的库和包含项的存在。

在搜索 指定的开发头文件时#includegcc和在列表中的位置高于g++。因此,如果您在和中都有库的开发头文件,则将使用中的那个,/usr/local/include/usr/include/usr/local/include/usr/include/usr/local/include无论版本如何。虽然这在 Precise 中可能没问题,因为本地编译的库可能是较新的版本,但在 Trusty 中就不行了,因为库的系统版本与您安装的库的版本相同或较新。此外,随着系统库的更改,SONAME 也会更改,本地编译的库必须重新编译。因此,gcc/g++将使用较旧的版本,并可能抱怨缺少符号和/或链接错误。

如果主存储库中存在某个库,通常建议使用该库,而不是自己编译它(除非你需要您可以使用库的较新版本来开发或修复错误);这样,当您升级系统时,该库也会更新,并重新编译以正确链接到其他库。

相关内容