【发布时间】:2012-09-14 06:42:22
【问题描述】:
我的LIBRARY_PATH 环境变量中有一个自定义目录:/cs/public/lib/pkg/opencv/lib。
但是,当我使用 g++ --print-search-dirs 时,我得到了这个:
libraries: =
/cs/public/lib/pkg/opencv/lib/x86_64-suse-linux/4.6/:
/cs/public/lib/pkg/opencv/lib/../lib64/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/../lib64/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64/:
/lib/x86_64-suse-linux/4.6/:
/lib/../lib64/:
/usr/lib/x86_64-suse-linux/4.6/:
/usr/lib/../lib64/:
/cs/public/lib/pkg/opencv/lib/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../:
/lib/:
/usr/lib/
为什么 g++ 在我在 LIBRARY_PATH 变量中明确指定的内容之前查看这些替代方案和一大堆其他系统位置,并且记录在哪里?
如果在 LIBRARY_PATH 和 LIBRARY_PATH/../lib64 等之前搜索系统默认值,我会理解,但 g++ 会先放置 LIBRARY_PATH/../lib64,然后是系统路径,然后是 LIBRARY_PATH。此订购记录在哪里?
我的g++版本是g++ (SUSE Linux) 4.6.2
我的操作系统是openSUSE 12.1 (x86_64)
【问题讨论】:
-
每当我将库路径添加到我的
LIBRARY_PATH并且我执行gcc --print-search-dirs时,我都会看到我的库路径,然后是x86_64-pc-linux-gnu/4.5.4/、../lib64/和路径本身。不仅../lib64/附加目录。 -
是的,我的也是。我刚刚注意到,但搜索列表比附加版本更靠后,并且两者之间有系统目录。我仍然不明白这种行为,我编辑了我的问题。
-
我猜是因为它是 64 位的,所以它首先放置所有
../lib64/和 OS 库(例如x86_64-suse-linux/4.6/)路径,前面是您的自定义库,然后是路径本身。同样的事情发生在我的 32 位 linux 系统上,除了../lib64部分没有。 -
不过,我想知道这是在哪里记录的。这有点抱怨,但我希望如果我明确设置 LIBRARY_PATH,它将优先于 /usr/lib64/gcc/x86_64-suse-linux/4.6/,特别是因为 g++ 确实 i> 注意让 LIBRARY_PATH/../lib64 优先于 /usr/lib64/gcc/x86_64-suse-linux/4.6/。
-
lib64 是在编译 GCC 时在 gcc/config/i386/t-linux 中定义的。操作系统附带的 GCC 版本在构建 GCC 之前已修补了此文件。如果您希望自定义 GCC 安装首先使用 /cs/public/lib/pkg/opencv/lib,则必须修改 gcc/config/i386/t-linux 并重新构建 GCC。