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

macOS下Conan+CMake构建ScreenCaptureLite报x86_64未定义符号问题

问题解答

方案优先级说明

优先选择修改Conan recipe配置,这符合包管理的设计原则:库本身的依赖、链接规则应该由包recipe统一维护,所有消费这个包的项目不需要额外重复配置,可避免重复出错。

修改Conan recipe的具体操作

你需要修改conanfile.py的package_info方法,根据不同操作系统添加对应的系统依赖、框架配置,同时修正你原来写错的库名:

from conans import ConanFile, CMake, tools


class ScreenCapLiteConan(ConanFile):
    name = "ScreenCaptureLite"
    version = "11.0.0"
    license = "MIT"
    author = "smasherprog@gmail.com"
    url = "https://github.com/smasherprog/screen_capture_lite/"
    description = "Capture screen grabs in C++"
    topics = ("screengrab", "capture")
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False]}
    default_options = {"shared": False}
    generators = "cmake"

    def source(self):
        # 建议将SSH地址替换为HTTPS地址,避免无SSH密钥的环境拉取失败
        self.run("git clone --depth 1 --branch v11.0.0 https://github.com/smasherprog/screen_capture_lite.git")

    def build(self):
        cmake = CMake(self)
        cmake.configure(source_folder="screen_capture_lite")
        cmake.build()

    def package(self):
        self.copy("*.h", dst="include", src="screen_capture_lite/include", keep_path=False)
        # 删掉模板残留的hello.lib拷贝逻辑
        self.copy("*.dll", dst="bin", keep_path=False)
        self.copy("*.so", dst="lib", keep_path=False)
        self.copy("*.dylib", dst="lib", keep_path=False)
        self.copy("*.a", dst="lib", keep_path=False)

    def package_info(self):
        # 修正库名,和实际编译产出的libscreen_capture.a对应
        self.cpp_info.libs = ["screen_capture"]
        if self.settings.os == "Windows":
            self.cpp_info.system_libs = ["Dwmapi"]
            self.cpp_info.defines.append("NOMINMAX")
        elif self.settings.os == "Macos":
            self.cpp_info.frameworks = [
                "CoreFoundation",
                "Cocoa",
                "CoreMedia",
                "AVFoundation",
                "CoreGraphics",
                "CoreVideo"
            ]
            self.cpp_info.system_libs = ["pthread"]
        elif self.settings.os == "Linux":
            self.cpp_info.system_libs = [
                "X11",
                "Xfixes",
                "Xtst",
                "Xinerama",
                "pthread"
            ]

修改完成后重新打包上传到私有registry,原有消费项目不需要调整任何代码即可正常完成链接。

临时方案:修改消费项目CMakeLists.txt

如果你暂时不想更新Conan包,也可以把官方的平台依赖配置加到你自己项目的CMakeLists.txt里,在链接时追加平台依赖库即可:

cmake_minimum_required(VERSION 2.8.12)
project(scl_app_server)
add_compile_options(-std=c++17)

# Using the "cmake" generator
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

# 新增平台依赖配置
if(WIN32)
    set(PLATFORM_LIBS Dwmapi)
    add_definitions(-DNOMINMAX)
elseif(APPLE)
    find_package(Threads REQUIRED)
    find_library(corefoundation_lib CoreFoundation REQUIRED)
    find_library(cocoa_lib Cocoa REQUIRED)
    find_library(coremedia_lib CoreMedia REQUIRED)
    find_library(avfoundation_lib AVFoundation REQUIRED)
    find_library(coregraphics_lib CoreGraphics REQUIRED)
    find_library(corevideo_lib CoreVideo REQUIRED)
   
    set(PLATFORM_LIBS
        ${CMAKE_THREAD_LIBS_INIT}
        ${corefoundation_lib}
        ${cocoa_lib}
        ${coremedia_lib}
        ${avfoundation_lib}
        ${coregraphics_lib}  
        ${corevideo_lib}
    ) 
else()
    find_package(X11 REQUIRED)
    if(!X11_XTest_FOUND)
        message(FATAL_ERROR "X11 extensions are required, but not found!")
    endif()
    if(!X11_Xfixes_LIB)
        message(FATAL_ERROR "X11 fixes extension is required, but not found!")
    endif()
    find_package(Threads REQUIRED)
    set(PLATFORM_LIBS
        ${X11_LIBRARIES}
        ${X11_Xfixes_LIB}
        ${X11_XTest_LIB}
        ${X11_Xinerama_LIB}
        ${CMAKE_THREAD_LIBS_INIT}
    )
endif()

FILE ( GLOB SCL_APP_SRC src/*.cpp )

add_executable(scl_app_server ${SCL_APP_SRC} )
# 新增PLATFORM_LIBS链接参数
target_link_libraries(scl_app_server CONAN_PKG::ScreenCaptureLite ${PLATFORM_LIBS})

该方案的缺点是所有依赖ScreenCaptureLite包的项目都要重复添加这段配置,维护成本高,仅适合临时测试使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:00