Windows按下列顺序搜索 DLL:
- 可执行模块所在的目录。 GetMoudleFileName
- Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。
- Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
- 进程的当前目录。 GetCurrentDirectory
- PATH 环境变量中列出的目录。 GetEnvironmnetVariable
linux按下列顺序搜索.so:
-
缓存:动态链接器首先搜索已加载的共享库的缓存,以提高性能。
-
默认系统路径:动态链接器接下来会搜索一组默认的系统共享库路径,例如/lib
和/usr/lib
。这些路径是系统安装的共享库的标准位置。
-
LD_LIBRARY_PATH环境变量指定的路径:如果没有在默认系统路径中找到所需的共享库,动态链接器会检查LD_LIBRARY_PATH环境变量。LD_LIBRARY_PATH指定了一个或多个路径,动态链接器会按照它们的顺序搜索这些路径中的共享库。
所以,如果在默认系统路径(如/lib
)和LD_LIBRARY_PATH环境变量指定的路径中都存在同名的共享库,动态链接器将会先找到并加载默认系统路径中的共享库,而不会在LD_LIBRARY_PATH指定的路径中搜索。
需要注意的是,为了避免潜在的冲突和问题,最好的做法是将共享库正确安装到系统的默认路径中,而不是依赖于LD_LIBRARY_PATH来指定自定义路径。LD_LIBRARY_PATH的使用应该限制在特定的情况下,例如在调试或开发过程中指定临时路径。
总结而言,动态链接器会先搜索默认的系统路径,然后才会搜索LD_LIBRARY_PATH环境变量指定的路径。因此,如果存在同名的共享库,优先加载的是默认系统路径中的共享库。