【问题标题】:Adding to the *end* of the gnu ld library search paths添加到 gnu ld 库搜索路径的 *end*
【发布时间】:2011-10-30 23:49:40
【问题描述】:

我知道如何使用 -Ldir 选项添加到 GNU ld 的库搜索路径并广泛使用它。但据我阅读gccld 的手册可以看出,没有办法添加到库搜索路径列表的end 中。

-L 选项添加到开头,然后搜索默认系统库路径。但我想添加一个“如果你找不到它”的路径。有没有办法用 ld 做到这一点?

我可以想象一个 hacky-crap 解决方案,它提取所有标准库目录(使用 -print-search-dirs)并按照我想要的顺序将它们添加到 -L 搜索目录列表中,在默认情况下它们的隐含重复之前搜索路径...

但是必须有更好的方法......

【问题讨论】:

    标签: linker shared-libraries gnu ld binutils


    【解决方案1】:

    我不认为你可以做你想做的事。但是,如果您使用以下ld 标志强制包含的库中的所有符号为弱符号怎么办:

     -weak_library path_to_library
                 This is the same as listing a file name path to a library on
                 the link line except that it forces the library and all ref-
                 erences to it to be marked as weak imports.
    

    这样,如果其他库包含有更强的符号,它们将覆盖look-here-if-you-can't-find-it-anywhwere-else.so 中的符号。如果LD_LIBRARY_PATH中提到的库中没有定义强符号,则使用look-here-if-you-can't-find-it-anywhwere-else.so中的弱符号。

    【讨论】:

    • 现在如果我能记住触发这个问题的特定上下文......
    【解决方案2】:

    /etc/ld.so.conf 文件有一个系统范围的目录路径列表,在编译时在其中搜索库,遵守此类文件条目的换行符分隔顺序。

    修改该文件后,您必须运行 ldconfig(以 root 身份)以激活新设置。

    【讨论】:

    • 这听起来 非常 是 linux 特有的。不过,它可能适用于特定环境。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2010-11-17
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多