windows和linux的动态库环境变量
Windows程序在start时,同Linux一样,要将动态库load进来,Linux会查找LD_LIBRARY_PATH, Windows会查找环境变量PATH,以下是各平台的查找路径: Linux: LD_LIBRARY_PATH Solaris:LD_LIBRARY_PATH HP: SHLID_PATH AIX: LIBPATH Windows
·
Windows程序在start时,同Linux一样,要将动态库load进来,Linux会查找LD_LIBRARY_PATH, Windows会查找环境变量PATH,以下是各平台的查找路径:
Linux: LD_LIBRARY_PATH
Solaris:LD_LIBRARY_PATH
HP: SHLID_PATH
AIX: LIBPATH
Windows: PATH
这些只是各平台会查找的其中一个路径,如Solaris就还会查找RPATH。
这不是这里要说的重点,在Linux及Unix平台上,程序在start时,如果查找到一个名字匹配,但格式不匹配的动态库,将报错,并退出,如32bit程序在LD_LIBRARY_PATH里面先找到了一个64bit的动态库,将报一个类似XXX.so: wrong ELF class: ELFCLASS64的错误,然后程序退出。
Windows平台不一样,使用Procmon工具可以看到,即使在PATH路径里面找到一个错误位数的dll,程序也会尝试将它读进来,并且从Procmon里看不到错误信息,但可以推测它load不成功,因为从Procmon里面看到程序继续查找PATH里面的其它路径,尝试去找到正常的dll,如果后面的路径有一个位数匹配的dll,程序就能load进来,成功运行起来。
这里要注意两件事,一是Windows平台load到位数不匹配的dll,不会被迫退出;二是用Procmon工具不能直接看出load dll是否出错,只能从后面的路径推测它出错了
Linux: LD_LIBRARY_PATH
Solaris:LD_LIBRARY_PATH
HP: SHLID_PATH
AIX: LIBPATH
Windows: PATH
这些只是各平台会查找的其中一个路径,如Solaris就还会查找RPATH。
这不是这里要说的重点,在Linux及Unix平台上,程序在start时,如果查找到一个名字匹配,但格式不匹配的动态库,将报错,并退出,如32bit程序在LD_LIBRARY_PATH里面先找到了一个64bit的动态库,将报一个类似XXX.so: wrong ELF class: ELFCLASS64的错误,然后程序退出。
Windows平台不一样,使用Procmon工具可以看到,即使在PATH路径里面找到一个错误位数的dll,程序也会尝试将它读进来,并且从Procmon里看不到错误信息,但可以推测它load不成功,因为从Procmon里面看到程序继续查找PATH里面的其它路径,尝试去找到正常的dll,如果后面的路径有一个位数匹配的dll,程序就能load进来,成功运行起来。
这里要注意两件事,一是Windows平台load到位数不匹配的dll,不会被迫退出;二是用Procmon工具不能直接看出load dll是否出错,只能从后面的路径推测它出错了
更多推荐
已为社区贡献3条内容
所有评论(0)