我很难尝试仅使用系统原始文件夹中的依赖项来编译内容。但是,/usr/local 中安装了不同版本的库和工具。
G++ 总是包含来自 /usr/local/include 的文件,但它与 /usr/lib 中的库相链接,这导致了很多混乱。
我的快速解决方案是告诉 Linux(Ubuntu)不要查看 /usr/local,而只依赖其外部的内容:默认安装包的地方。
可悲的是,我无法删除 /usr/local 中的内容,因为有些应用程序正在使用那里的库。
如何才能做到这一点?
答案1
编译时您已设置环境变量:
LD_LIBRARY_PATH=/usr/lib
(或任何你需要的地方)
并且还检查是否/etc/ld.so.conf
和/或/etc/ld.so.conf.d/
没有您不需要的路径。
答案2
考虑使用 chroot 或容器在具有已知依赖项的干净环境中构建软件。Debian 和 Red Hat 打包社区都认为这是最佳实践。对于 Debian,首选工具是 pbuilder。它旨在生成 debs,这很方便,因为您可以使用 apt 安装它们。
虽然您可以更改构建以完全忽略 /usr/local/,但魔鬼就在细节中。构建脚本千差万别,从晦涩难懂的自动工具到自定义编写的 Makefile。在理解并修补任何 /usr/local/ 所需的时间里,您可以拥有一个生成可重现构建的 chroot 系统。