gpt4 book ai didi

c - ld 搜索格式错误的目录路径

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:46:13 25 4
gpt4 key购买 nike

我正在使用 ld 链接到我的文件系统上的库。

当我运行命令 ld -verbose -lmylib 时,我得到以下结果:

attempt to open /usr/x86_64-linux-gnu/lib64/libmylib.so failed
attempt to open /usr/x86_64-linux-gnu/lib64/libmylib.a failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libmylib.so failed
attempt to open //usr/local/lib/x86_64-linux-gnu/libmylib.a failed
attempt to open //usr/local/lib64/libmylib.so failed
attempt to open //usr/local/lib64/libmylib.a failed
attempt to open //lib/x86_64-linux-gnu/libmylib.so failed
attempt to open //lib/x86_64-linux-gnu/libmylib.a failed
attempt to open //lib64/libmylib.so failed
attempt to open //lib64/libmylib.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libmylib.so failed
attempt to open //usr/lib/x86_64-linux-gnu/libmylib.a failed
attempt to open //usr/lib64/libmylib.so failed
attempt to open //usr/lib64/libmylib.a failed
attempt to open //usr/local/lib/libmylib.so failed
attempt to open //usr/local/lib/libmylib.a failed
attempt to open //lib/libmylib.so failed
attempt to open //lib/libmylib.a failed
attempt to open //usr/lib/libmylib.so failed
attempt to open //usr/lib/libmylib.a failed
ld: cannot find -lmylib

我不明白为什么它会尝试打开前缀为 // 的文件。我的另一台计算机不是这种情况。我试过更改 LIBRARY_PATHLD_LIBRARY_PATH、我的 PATH 等,但似乎没有任何效果。我在网上看过,但找不到任何东西。这些路径设置在哪里?

谢谢。

最佳答案

这里的问题是您正在尝试链接库 mylib ,但是这个库不在系统的库搜索路径中,或者根本不存在。请你把它放在正确的地方。如果库在另一个不在库搜索路径中的目录中,您可以使用 -L 添加它。 ld 的选项,例如 ld -verbose -L<the directory> -lmylib .

至于你看到的双斜杠,这不是问题,因为在 Linux 上,超过 more 个斜杠被解释为一个斜杠,即 //foo/bar与/foo/bar` 相同,因此无需担心。

关于搜索路径的区别,在Fedora上,默认的搜索路径是:

SEARCH_DIR("/usr/x86_64-redhat-linux/lib64"); SEARCH_DIR("/usr/lib64"); SEARCH_DIR("/usr/local/lib64"); SEARCH_DIR("/lib64"); SEARCH_DIR("/usr/x86_64-redhat-linux/lib"); SEARCH_DIR("/usr/local/lib"); SEARCH_DIR("/lib"); SEARCH_DIR("/usr/lib");

在 Ubuntu 上,它是:

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/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");

因此 Ubuntu 以前缀“=”开始每个路径,现在让我们看看 ld 为此做了什么:

If searchdir begins with "=", then the "=" will be replaced by the sysroot prefix, controlled by the --sysroot option, or specified when the linker is configured.

这意味着 =将被系统根取代,最像的是/对于 Linux 系统。这就是为什么您在 Ubuntu 上看到双斜线而不是在 Fedora 上看到的原因。

关于c - ld 搜索格式错误的目录路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com