在Mac OS Catalina上解析动态库位置

问题描述

我试图了解Mac OS Catalina确定动态库位置并解决运行时名称冲突的过程。该网站上的信息:

https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/DynamicLibraryUsageGuidelines.html#//apple_ref/doc/uid/TP40001928-SW12

表示存在一个搜索层次结构,该层次结构以LD_LIBRARY_PATH的内容开头,并遍历许多其他环境变量; DYLD_FALLBACK_LIBRARY_PATH其中之一(如果未明确设置)具有认值,包括/ usr / lib之类的位置。

然后我看到,如果我使用ldd -d查看库的依赖关系,它将显示具有路径信息的每个库的依赖关系:

nasmac3465:libs ptenenba$ ldd -d libtess-mod.dylib
libtess-mod.dylib:
Contents of (__DATA,__data) section
000000000001cb80    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
000000000001cb90    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
000000000001cba0    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
    /Users/ptenenba/git/tess/spoc/code/dist/libs/libtess-mod.dylib (compatibility version 0.0.0,current version 0.0.0)
    /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0,current version 7.28.0)
    /Users/ptenenba/git/tess/spoc/code/dist/libs/libtess-common.dylib (compatibility version 0.0.0,current version 0.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,current version 1281.100.1)
    /opt/local/lib/libgcc/libgcc_s.1.dylib (compatibility version 1.0.0,current version 1.0.0)
nasmac3465:libs ptenenba$ 

我的问题:当每个库同时具有名称和依赖项的路径时,为什么需要使用LD_LIBRARY_PATH或DYLD_LIBRARY_PATH指定任何库搜索路径?

解决方法

通常,不必要和不希望将环境变量与dyld一起使用动态库加载器。相反,应在链接阶段设置路径,或稍后使用install_name_tool修改路径。