我想让g ++链接器(ld)从目录/usr/local/lib
开始搜索库。如何将/usr/local/lib
永久添加到链接器的搜索路径?
问题是我正在尝试将库 libboost_program_options.a 链接到我的源代码。该库有两个副本,一个在/usr/lib/x86_64-linux-gnu/
,另一个在/usr/local/lib
。如何使链接器首先查看/usr/local/lib
并选择而不是另一个?
我系统上ldconfig -v 2>/dev/null | grep -v ^$'\t'
的输出:
/usr/lib/x86_64-linux-gnu/libfakeroot:
/lib/i386-linux-gnu:
/usr/lib/i386-linux-gnu:
/usr/local/lib:
/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu/mesa-egl:
/usr/lib/nvidia-304:
/usr/lib32/nvidia-304:
/lib32:
/usr/lib32:
/lib:
/usr/lib:
/usr/lib/nvidia-304/tls: (hwcap: 0x8000000000000000)
/usr/lib32/nvidia-304/tls: (hwcap: 0x8000000000000000)
ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64")
SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/local/lib64")
SEARCH_DIR("=/lib/x86_64-linux-gnu")
SEARCH_DIR("=/lib64")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib64")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib")
SEARCH_DIR("=/usr/local/lib")
SEARCH_DIR("=/lib")
SEARCH_DIR("=/usr/lib")
答案 0 :(得分:1)
搜索路径在编译期间使用的链接描述文件中指定。运行gcc -v foo.c
以执行链接并查看使用的链接描述文件。就我而言,它是/usr/lib/ldscripts/elf_x86_64.x
。在该链接描述文件中,您将找到SEARCH_DIR
指令。将其更新为包含/usr/local/lib
。
请注意,ldconfig
和ld.so.conf.d
仅在运行时使用。