ld无法链接已存在的libxxx库:短名失败但全路径可访问求助
链接本地libxxx库时的短名查找失败问题
我在~/.local/lib/路径下有libxxx相关文件:
❯ ls -al ~/.local/lib/ total 56292 drwxr-xr-x 2 muse user 4096 Jun 23 23:57 . drwx------ 11 muse user 4096 Jun 23 23:02 .. lrwxrwxrwx 1 muse user 40 Jun 23 23:51 libxxx.so -> /home/muse/.local/lib/libxxx.so.0.0.1 -rwxr-xr-x 1 muse user 57622768 Jun 23 23:02 libxxx.so.0.0.1
当用短名-lxxx尝试链接时出现错误:
❯ ld -L~/.local/lib/ -lxxx --verbose | grep -i '~/.local/lib//libxxx.so' ld: cannot find -lxxx attempt to open ~/.local/lib//libxxx.so failed
但直接用完整路径可以访问该库(仅提示缺少依赖库):
❯ ld ~/.local/lib//libxxx.so ld: warning: libprotobuf.so.23.1.0, needed by /home/muse/.local/lib//libxxx.so, not found (try using -rpath or -rpath-link) ....
问题原因
ld命令不会自动解析~符号,导致-L~/.local/lib/中的路径没有被识别为你的家目录路径,进而找不到目标库文件。
解决办法
- 使用绝对路径替代
~:
ld -L/home/muse/.local/lib/ -lxxx --verbose
- 通过
$HOME让shell解析路径:
ld -L"$HOME/.local/lib" -lxxx --verbose
- 将路径加入系统库搜索路径:
- 临时生效(当前终端会话):
export LD_LIBRARY_PATH="$HOME/.local/lib:$LD_LIBRARY_PATH" ld -lxxx --verbose
- 永久生效:将上述
export命令添加到~/.bashrc或~/.zshrc配置文件中,重启终端后即可自动加载。
内容的提问来源于stack exchange,提问作者mu5e
相关产品推荐
相关产品推荐

