You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下CMake编译Ultralight项目遇GStreamer/GLib未定义引用错误

编译Ultralight Linux项目时遇到GLib相关链接错误

编译Linux平台的Ultralight项目时,出现以下链接错误:

/usr/bin/ld: /mnt/e/Programming/C_C++/ultralight-sdk-latest-linux-x64/bin/libgstreamer-full-1.0.so: undefined reference to `g_time_zone_new_identifier'

/usr/bin/ld: /mnt/e/Programming/C_C++/ultralight-sdk-latest-linux-x64/bin/libgstreamer-full-1.0.so: undefined reference to `g_memdup2'

当前使用的CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.19.0)
project(BlackBoard)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(CMAKE_SYSTEM_NAME MATCHES "Windows")
    set(ULTRALIGHT_SDK_DIR E:/Programming/C_C++/ultralight-sdk-latest-win-x64)
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    set(ULTRALIGHT_SDK_DIR /mnt/e/Programming/C_C++/ultralight-sdk-latest-linux-x64)
endif()



IF(CMAKE_SYSTEM_NAME MATCHES "Windows")
    add_executable(BlackBoard main.cpp)

    include_directories(${ULTRALIGHT_SDK_DIR}/include)
    link_directories(${ULTRALIGHT_SDK_DIR}/lib)

    target_link_libraries(BlackBoard ${ULTRALIGHT_SDK_DIR}/lib/Ultralight.lib)
    target_link_libraries(BlackBoard ${ULTRALIGHT_SDK_DIR}/lib/UltralightCore.lib)
    target_link_libraries(BlackBoard ${ULTRALIGHT_SDK_DIR}/lib/AppCore.lib)
    target_link_libraries(BlackBoard ${ULTRALIGHT_SDK_DIR}/lib/WebCore.lib)
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
    FIND_PACKAGE(PkgConfig REQUIRED)
    PKG_CHECK_MODULES(GLIB REQUIRED glib-2.0)

    include_directories(${GLIB_INCLUDE_DIRS})
    link_directories(${GLIB_LIBRARY_DIRS})
    link_libraries(${GLIB_LIBRARIES})

    link_libraries(X11)

    include_directories(${ULTRALIGHT_SDK_DIR}/include)
    link_directories(${ULTRALIGHT_SDK_DIR}/bin)
    link_libraries(
            UltralightCore
            AppCore
            Ultralight
            WebCore
    )

    add_executable(BlackBoard main.cpp)

else()
    message(STATUS ${CMAKE_SYSTEM_NAME})
endif()


add_custom_command(TARGET BlackBoard POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_SDK_DIR}/bin" $<TARGET_FILE_DIR:BlackBoard>)
add_custom_command(TARGET BlackBoard POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/assets/" "$<TARGET_FILE_DIR:BlackBoard>/assets")
add_custom_command(TARGET BlackBoard POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${ULTRALIGHT_SDK_DIR}/resources" "$<TARGET_FILE_DIR:BlackBoard>/assets/resources")

问题原因

g_time_zone_new_identifier和g_memdup2是GLib 2.68及以上版本才新增的API,出现该错误说明系统中安装的GLib版本低于要求,而Ultralight SDK依赖的libgstreamer-full-1.0.so需要调用这些高版本GLib函数。

解决方案

  • 方案1:升级系统GLib版本
    在Debian/Ubuntu系系统中,可通过以下命令升级:

    sudo apt update
    sudo apt install libglib2.0-dev
    

    若官方源版本仍不满足,可考虑添加第三方PPA或手动编译安装高版本GLib。

  • 方案2:调整CMake链接顺序
    当前CMake使用link_libraries全局设置链接库,可能导致链接器优先使用Ultralight SDK目录下的旧版GLib相关库。修改Linux部分的CMake配置,改用target_link_libraries针对目标设置链接库,确保系统GLib库在Ultralight库之前链接:

    elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
        FIND_PACKAGE(PkgConfig REQUIRED)
        PKG_CHECK_MODULES(GLIB REQUIRED glib-2.0)
    
        include_directories(${ULTRALIGHT_SDK_DIR}/include)
        link_directories(${ULTRALIGHT_SDK_DIR}/bin)
    
        add_executable(BlackBoard main.cpp)
    
        # 优先链接系统GLib和X11,再链接Ultralight相关库
        target_link_libraries(BlackBoard
            ${GLIB_LIBRARIES}
            X11
            UltralightCore
            AppCore
            Ultralight
            WebCore
        )
    
  • 方案3:检查SDK兼容性
    确认下载的Ultralight SDK版本是否与当前系统GLib版本兼容,若SDK针对更高版本GLib编译,可选择升级系统或下载适配旧版GLib的Ultralight SDK版本(若官方提供)。


内容的提问来源于stack exchange,提问作者Maximilian Bastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:55:32