g_object_set 来自 MacPorts 的 glib 链接器错误
g_object_set linker error with glib from MacPorts
在使用 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_print 的引用。是否有可能链接已正确完成,但库中由于某种原因缺少函数?
我该如何解决?
终于找到我的错误了。当使用 Webkit 项目的 FindGLIB 时,它默认只搜索主要的 glib 库。它的组件除了被发现之外还必须通过:
find_package(GLIB COMPONENTS gobject REQUIRED)
会找到 glib 本身并将其保存在 ${GLIB_LIBRARIES}
中,也会找到 gobject 并将其保存在 ${GLIB_GOBJECT_LIBRARIES}
中以便它们可以在 target_link_libraries()
中使用
提醒:始终阅读文件中的评论 headers - 它们通常包含有用的信息...
# 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
在使用 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_print 的引用。是否有可能链接已正确完成,但库中由于某种原因缺少函数?
我该如何解决?
终于找到我的错误了。当使用 Webkit 项目的 FindGLIB 时,它默认只搜索主要的 glib 库。它的组件除了被发现之外还必须通过:
find_package(GLIB COMPONENTS gobject REQUIRED)
会找到 glib 本身并将其保存在 ${GLIB_LIBRARIES}
中,也会找到 gobject 并将其保存在 ${GLIB_GOBJECT_LIBRARIES}
中以便它们可以在 target_link_libraries()
提醒:始终阅读文件中的评论 headers - 它们通常包含有用的信息...
# 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