【问题标题】:How to use wx-config information in makefile for setting compiler/linker variables?如何使用 makefile 中的 wx-config 信息来设置编译器/链接器变量?
【发布时间】:2013-11-14 13:00:44
【问题描述】:

我有一个基于 wxwidgets 的应用程序,使用 boost 和 pcre 库。 在 makefile 中,我通常必须使用 CXXFLAGS 变量等来放置编译器和链接器路径。

这是我写的:

CXXFLAGS := -I. -I/path/boost/prod -I/path/pcre/include $(shell path/wxWidgets/bin/wx-config  --unicode=yes --static=yes --cxxflags) -DPCRE_STATIC -O3

CPPFLAGS := -I. -I/path/boost/prod -I/path/pcre/include $(shell path/wxWidgets/bin/wx-config --unicode=yes --static=yes --cppflags) -DPCRE_STATIC -O3

LDFLAGS := -L. -L/path/pcre/lib -L/path/wxWidgets/lib $(shell $path/wxWidgets/bin/wx-config --unicode=yes --static=yes --optional-libs html,aui,stc,xml,adv,core,base) -lpcre -O3
    EXEC_POST

根据我现在的情况,wx-config 告诉我我需要哪些库。

当我尝试链接我的编译文件时,链接器会因为找不到例如错误而出现错误。库“gio-2.0”,它是 wx-config 声明的库之一。我现在可以手动安装所有未找到的库并且它可以工作,但通常所有这些需要的库都应该是 wxwidgets 的一部分......我想我搞砸了上面编写的 makefile 配置中的部分。你怎么看?

【问题讨论】:

  • -I-L 采用单个路径参数,而不是多个路径参数。在每个手动路径之前都需要-I/-L
  • 我使用它们,我只是在上面写了路径,而不是用 -I -L 写了整个路径。将在上面进行编辑以使其更清晰。
  • wxWidgets/lib 目录下是否有 gio-2.0 库?仅仅因为 wxWidgets 依赖它并不意味着它包含它。
  • 你确定 wx-config 声明了不属于它的库吗?如果是,我如何在 makefile 中声明以在二进制文件中静态包含手动安装的 lib?
  • 我敢肯定,如果 wxWidgets 需要 glib 的 gio 库,它可能不会将该库作为其源代码的一部分,而是依赖于系统来提供该库。如果是这种情况,那么您需要安装它以在构建时链接。在这种情况下,您只需要安装它以静态链接到它,就像您要静态链接的任何其他库一样。我假设你的回答表明 wxWidgets/lib 路径下没有 gio 库?

标签: makefile wxwidgets libs


【解决方案1】:

您应该使用--libs 而不是--optional-libs

另外,您不需要显式的-L/path/wxWidgets/lib,这已经由wx-config 输出。

【讨论】:

  • 很好的提示,但不幸的是它并没有改变任何东西。我发现,您可以在构建 wxwidgets 时包含库。会试试看。
  • 这种方法只能部分成功,因为有些库不能通过构建 wxWidgets 包含在内。但我读到,编译哪个系统 wxWidgets 会有所不同。这意味着,为了不出现链接问题,您应该先在要编译的同一系统上构建 wxWidgets。这有意义吗?
  • 是的,如果您尝试使用wx-config 的系统没有创建此wx-config 的系统上存在的库,那么它肯定不会工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多