题主问的路径问题是开发相关的,那么我来说说吧:
先说include的路径:
编译器的include路径是编译器配置有关的,不同的编译器,甚至相同编译器不同语言(比如C和C++)都是有不同配置的。
比如VC 2008里linux 下载,默认路径是在菜单:tools->option->project and solution里配置的,默认是:
$(VCInstallDir)include
$(VCInstallDir)atlmfcinclude
$(WindowsSdkDir)include
$(FrameworkSDKDir)include
对于GCC来说,GCC的默认include路径是可以集成到编译器里的,如果你能下载到GCC源码,可以看到有全局变量cpp_include_defaults,对于bsd还有INCLUDE_DEFAULTS宏来定义。
如果GCC编译的时候没有内置这些路径linux桌面路径,才会搜索C_INCLUDE_PATH和CPLUS_INCLUDE_PATH这两个环境变量。
在我的GCC4.8.1版本里什么是linux,看到的GCC至少会检查以下几个环境变量:
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
OBJCPLUS_INCLUDE_PATH
对于其它编译器来说,了解它的最好方法是去研究编译器的源码,里面都有详细的配置。
然后再说共享库的问题:
共享库其实就跟编译器无关了,是操作系统的行为。
对于linux来说,linux默认搜索LD_LIBRARY_PATH指向的路径。
对已Windows来说linux桌面路径,不同版本的Windows不同,XP时代默认搜索是当前路径+C:WINDOWSSYSTEM32,WIN7时代如果是64位会根据当前应用的不同决定搜索是SYSTEM32还是SysWOW64,另外WIN7有WINSXS也可能是共享库的搜索路径之一。
基本上就是这个情况。