2013-10-15 84 views
0

我有一個使用Qt的C++項目,並且按照預期工作。但是,問題是當我將 可執行文件複製到標準安裝的操作系統(例如Windows或Linux)時,我收到QtWidgets或其他Qt庫缺失錯誤。編譯一個Qt項目幷包含Qt庫

我試過參考Qt文檔,但我無法找到解決方案或我之後的例子。它與靜態和動態構建有關......但找不到一個好的示例或教程。

我看了教程http://www.qtcentre.org/wiki/index.php?title=Deploying_Qt_Applications,但它不是最有效的解決方案。

基本上我希望系統包含所需的Qt庫以及最終的編譯文件。我怎樣才能把它關掉?

+1

剛剛從QT-bin目錄中所需的DLL複製到同一目錄下的可執行文件。如果使用mingw編譯也提供了mingw所需的dll,請參閱http://stackoverflow.com/questions/17377706/cannot-run-my-exe-file-on-another-computer-application-requested-the-runtime-t/ 19136598#19136598 –

+0

我沒有在Windows上測試過,但是在Linux上將libQtCore.so(和其他庫)複製到與可執行文件相同的目錄中,但仍然引發錯誤。無論如何,我可以在應用程序中指定應用程序應該查找這些庫的文件夾嗎?不知道爲什麼這些功能不是簡單的指定一個相對文件夾! – roosevelt

+1

我不確定你想實現什麼。我所推薦的唯一東西已經在您提供的鏈接中涵蓋。也許你可以指定你不喜歡那裏的解決方案。 –

回答

1

您可以做的是製作一個腳本,將您的DLL(或.so *文件)複製到可執行文件夾中。一旦您在您的項目文件中添加一個額外的Makefile目標:

theproject.pro:

OTHER_FILES += copy.script # Assuming your copy script is called "copy.script" 
deploylibs.target = deploylibs 
deploylibs.command = ./copy.script # Launching the script 

QMAKE_EXTRA_TARGETS += deploylibs 

現在,您可以通過使用(nmake deploylibs命令部署庫。

NB:有一個非常有用的工具叫做「Dependency Walker」來找到你需要的DLL。它僅適用於Windows。至於Linux和其*.so*文件,您可以使用ldd命令:

>$: ldd theexecutable 
    alib.so => /path/to/library/on/your/computer.so 
...