2010-08-25 113 views
2

在我的應用程序中,我必須明確鏈接到一個DLL。該應用程序使用gcc編譯器在QT中。如何包含已包裝到新dll中的dll文件?

該應用程序必須鏈接到的DLL是另一個老的DLL的包裝。目的是使舊的dll適合一個新的界面。

編譯新的dll時,我使用隱式鏈接。新的dll使用msvc 2008進行編譯。原因是舊的dll具有無法被gcc識別的C++類函數。新界面使用c函數。

所以大局是,當我運行我的應用程序時,我鏈接新的DLL和新的DLL取決於舊的DLL。一切工作正常,除了我必須將舊的dll放在與exe文件相同的文件夾或與.pro文件相同的文件夾。

我試圖將舊庫添加到應用程序的qt .pro文件中,但沒有奏效。 有沒有什麼辦法可以移動舊的dll文件的目錄?

在此先感謝

Gooly

爲了表述更清楚,如果舊的DLL和應用程序使用相同的編譯器編譯的,我可能包括路徑在.pro文件舊的dll和lib並把它放在我想要的地方。但是現在只有新的DLL才能識別舊的dll函數,所以我不能再那樣做。我想知道是否有辦法修改exe文件在運行時搜索的路徑。現在它搜索exe文件夾和它的父文件夾。

+0

我不明白這個問題,爲什麼它不得不搬走?你給了它一個不同的名字,對吧? – 2010-08-25 19:35:01

+0

我希望它與其他庫的lib文件夾中,而不是在自動生成並且通常不包括在源代碼管理軟件中的調試或發佈文件夾中。換句話說,我只是不認爲該DLL應該在那裏。 – Gooly 2010-08-25 19:46:45

回答

0

Windows操作系統查找DLL的以特定的方式,下面的鏈接可能會有所幫助: Dynamic-Link Library Search

如果你想保留的dll在另一個文件夾中,然後加入lib文件夾到PATH環境變量將工作,但是當你部署軟件包時,你必須確保可以使用鏈接中指定的庫搜索順序找到目標機器上的dll。

+0

謝謝史蒂文,這真的很有幫助。 – Gooly 2010-08-26 15:27:00

0

我試圖修改dll搜索順序與SetDllDirectory這是在史蒂芬的答案中提到的鏈接。但它似乎只是一個msvc函數。 (我不確定,但是我包含了mingw winbase.h文件,但它仍然無法識別它)。

所以我試圖用putenv修改PATH變量,它的工作原理。