【问题标题】:How do you configure a makefile project that builds against a static library to build against a dynamic library instead?您如何配置针对静态库构建的 makefile 项目以针对动态库构建?
【发布时间】:2013-12-30 23:01:04
【问题描述】:

我有一个需要使用 Qt 的静态版本构建的 C++ 项目。然而,QtWebKit 不会成功地静态构建,尽管它确实构建成一个 dll 就好了。

我的问题是:如何告诉 Makefile 使用 dll 而不是静态库?这似乎应该是一项微不足道的任务,尽管我没有足够的 Makefile 经验来知道如何做到这一点。在此先感谢您提供任何帮助。

【问题讨论】:

  • 不像编译器的makefile那样多——makefile只是构建编译命令。你用的是什么编译器?
  • 抱歉,忘记添加标签了。我在 Windows 系统上使用 mingw32。如果在 *nix 环境中这是一个更简单的过程,我可以访问 Ubuntu 机器。

标签: c++ dll makefile static-libraries mingw32


【解决方案1】:

linux使用GNU Make环境下,与静态库链接的过程是

gcc obj1.o obj2.o staticlib.a -o outfile //不考虑静态库的包含路径

而且,与动态库的链接是

gcc obj1.c obj2.c -o outfile -labc //动态库是libabc.so,不考虑路径

gccmanpage我们可以看出,

  • -l 链接时搜索名为 library 的库。搜索的目录包括几个标准系统目录以及 您使用 -L 指定的任何内容
  • -L 将目录添加到要搜索的目录列表中 -l.

请相应地更新您的 makefile。

干杯!!

【讨论】:

  • 在 Windows 上使用 g++,我为我用 Qt 构建的所有必要的 DLL 添加了 -l。还有什么我做错了吗?我的命令如下所示:g++ -l..\..\qt\bin\QtCore4.dll -l..\..\qt\bin\QtNetwork4.dll -o .\bin\myapp.exe sourceDir1*。 cc sourceDir2*.cc sourceDir3*.cc sourceDir4*.cc.... 我得到的错误是它无法从头文件中找到这些 Dll 中内置的 Qt 类型
  • 好吧,看起来一切都在正常构建,我只是没有正确链接看起来像的 Dll。我已将此标记为答案,因为它解释了在 makefile 中要更改的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 2010-10-10
  • 2014-04-18
  • 1970-01-01
相关资源
最近更新 更多