在我的应用程序中,我必须明确链接到一个DLL。应用程序在QT中使用gcc编译器。
应用程序必须链接到的dll是另一个旧dll的包装器。目的是使旧的dll适应新的界面。
我在编译新dll时使用隐式链接。新的dll是用msvc 2008编译的。原因是旧的dll具有gcc无法识别的c ++类函数。新界面使用c函数。
总的来说,当我运行我的应用程序时,我链接新的dll,新的dll取决于旧的dll。一切正常,除了我必须将旧的dll放在与.pro
文件的exe或相同文件夹相同的文件夹中。
我试图将旧库添加到应用程序的qt .pro文件中,但是没有用。
有什么办法可以移动旧dll文件的目录吗?
更清楚地说明,如果使用相同的编译器编译旧的dll和应用程序,我可以在.pro文件中包含旧的dll和lib的路径,并将其放在我想要的任何位置。
但是,现在,只有新的dll识别旧的dll函数,所以我再也不能这样做了。我想知道是否有办法修改exe文件在运行时搜索的路径。现在它搜索exe
文件夹及其父文件夹。
答案 0 :(得分:0)
Windows操作系统以指定的方式查找dll,以下链接可能会有所帮助: Dynamic-Link Library Search
如果你想把dll保存在另一个文件夹中,那么将lib文件夹添加到你的PATH变量就行了,但是当你部署包时,你必须确保可以找到目标机器上的dll链接中指定的库搜索顺序。
答案 1 :(得分:0)
我尝试用SetDllDirectory修改dll搜索顺序,这是从史蒂文的答案链接中提到的。但它似乎只是一个msvc函数。 (我不确定,但是我包含了mingw winbase.h文件,它仍然无法识别它。)
所以我尝试使用putenv修改PATH变量,它可以工作。