2013-10-15 57 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 
...