• 7963阅读
  • 4回复

如何设定程序依赖库(DLL)的位置 [复制链接]

上一主题 下一主题
离线ninsun
 

只看楼主 倒序阅读 楼主  发表于: 2010-06-26
例如, 动态编译的带GUI的Qt程序都需要QtCore4.dll和QtGui4.dll(Qt4, windows下), 还需要一个和编译器相关的dll, 还有其他的可能依赖的库
将这些dll放在exe程序的目录中固然管用, 但是, 有没有方法设置一下, 让这些依赖库在其他地方的时候也能启动程序呢?
我知道通过手动设置环境变量可以达到目的, 但是, 我希望的是不用设置环境变量, 或者是自动设置环境变量的方法.(在main函数开始设置环境变量是没有效果的...是不是在编译的时候可以设置呢...)

大家有办法的话, 就贡献出来吧. 谢谢啦.
离线ninsun

只看该作者 1楼 发表于: 2010-06-27
自己顶一下...
话说, windows下真的没法通过程序设置依赖库dll路径吗... 太诡异了吧, 编译的时候也没法设定吗?
PS: 昨天搜索了一下, 似乎只发现linux下通过gcc的 make的-rpath可以设置库搜索路径... 但是windows下的mingw32-make好像就没有这个功能了...
离线dbzhang800

只看该作者 2楼 发表于: 2010-06-27
我对windows编程不太了解,不过还是建议你看一下windows程序设计或windows核心编程一类的书。

据说所知,exe程序的加载顺序大致是:

1. 系统保留一个足够大的地址空间区域,用于存放该. e x e文件。
2.当. e x e文件被映射到进程的地址空间中之后,系统将访问. e x e文件的一个部分,该部分列出了包含. e x e文件中的代码要调用的函数的D L L文件。
3. 对于每一个DLL,系统保留一个足够大的地址空间区域,用于存放该D L L文件。
4. 当所有的. e x e和D L L文件都被映射到进程的地址空间之后,系统开始执行. e x e文件的启动代码。

如果理解没错的话,也是就说在DLL加载完成之前,系统是不会理会你写的代码的。
离线ninsun

只看该作者 3楼 发表于: 2010-06-27
哎... 那就只能用环境变量了...
离线ninsun

只看该作者 4楼 发表于: 2010-06-27
最终, 写了个启动器了事... 帖子沉了吧...
http://www.qtcn.org/bbs/read.php?tid=30176
快速回复
限100 字节
 
上一个 下一个