【问题标题】:g_object_set linker error with glib from MacPorts来自 MacPorts 的 glib 的 g_object_set 链接器错误
【发布时间】:2015-10-22 12:26:20
【问题描述】:

在使用 cmake 构建项目(使用 GStreamer 1.0,因此依赖于 Glib 2.0)并链接到 glib 库时,我收到一个奇怪的链接器错误。 Glib 是使用 macports 安装的,libglib-2.0.0.dylib 存在于 /opt/local/lib/ 中。 FindGLIB 成功找到了它的头文件(编译工作),并且 ${GLIB_LIBRARIES} 提供了正确的库路径。

错误信息是

[100%] Linking CXX executable ../bin/presenter
Undefined symbols for architecture x86_64:
  "_g_object_set", referenced from:
  ...
  "_g_type_check_instance_cast", referenced from:
  ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我从列表中完全删除 glib,它也会抱怨缺少对 g_print 和 g_printerr 的引用。是否有可能链接已正确完成,但由于某种原因库中的函数丢失了?

我该如何解决?

【问题讨论】:

    标签: macos cmake macports glib


    【解决方案1】:

    终于发现我的错误了。当使用 Webkit 项目的 FindGLIB 时,它默认只搜索主 glib 库。它的组件除了要被传递外还要被找到:

    find_package(GLIB COMPONENTS gobject REQUIRED)
    

    会找到 glib 本身并将其保存在 ${GLIB_LIBRARIES} 和 gobject 并将其保存在 ${GLIB_GOBJECT_LIBRARIES} 以便它们可以在 target_link_libraries() 中使用

    提醒:始终阅读文件头中的 cmets - 它们通常包含有用的信息...

    # Optionally, the COMPONENTS keyword can be passed to find_package()
    # and Glib components can be looked for.  Currently, the following
    # components can be used, and they define the following variables if
    # found:
    #
    #  gio:             GLIB_GIO_LIBRARIES
    #  gobject:         GLIB_GOBJECT_LIBRARIES
    #  gmodule:         GLIB_GMODULE_LIBRARIES
    #  gthread:         GLIB_GTHREAD_LIBRARIES
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      • 2012-04-15
      相关资源
      最近更新 更多