当我运行命令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_PATH,LD_LIBRARY_PATH,我的PATH等,但似乎无济于事.我在网上看过,但找不到任何东西.这些路径在哪里设置?
谢谢.
解决方法:
这里的问题是您试图链接到库mylib,但是该库不在系统的库搜索路径中,或者根本不存在.您请使其位于正确的位置.如果库位于不在库搜索路径中的另一个目录中,则可以使用-L选项将其添加到ld,例如ld -verbose -L< thedirectory> -lmylib.
至于您看到的双斜杠,这不是问题,因为在Linux上,更多的斜杠被解释为一个斜杠,也就是说,// foo / bar与/ foo / bar相同,所以不要需要担心.
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上看到双斜线的原因.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。