首页 > 解决方案 > Clang 链接器“找不到 -lCocoa 的库”

问题描述

基于TheChernos Game Engine 系列,我尝试为 MacOSX 而不是 Windows 编写系统。

使 GLFW、glad 和 ImGui 编译后,使用 command 找不到 -lCocoa 库 ld: library not found for -lCocoa。由于我使用 IOKit、CoreVideo 和 OpenGL 的方式相同,因此我认为当我越过这座桥时也会显示相同的错误。

在他的系列中,他使用了 premake5,这是工作空间的 premake5,涵盖了静态库和引擎的使用示例应用程序。

workspace "Neurex"
    architecture "x64"

    configurations {"Debug", "Release", "Dist"}

startproject "NXSandbox"
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"

includeDir = {}
includeDir["GLFW"] = "Neurex/vendor/GLFW/include"
includeDir["glad"] = "Neurex/vendor/glad/include"
includeDir["spdlog"] = "Neurex/vendor/spdlog/include"
includeDir["imgui"] = "Neurex/vendor/imgui"
includeDir["glm"] = "Neurex/vendor/glm"

group "Dependencies"
    include "Neurex/vendor/GLFW"
    include "Neurex/vendor/glad"
    include "Neurex/vendor/imgui"
group ""


project "Neurex"
    location "Neurex"
    kind "StaticLib"
    language "C++"
    cppdialect "C++17"
    staticruntime "on"

    targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    objdir ("bin-int/" .. outputdir .. "/%{prj.name}")

    pchheader "nxpch.h"
    pchsource "Neurex/src/nxpch.cpp"

    files
    {
        "%{prj.name}/src/**.h",
        "%{prj.name}/src/**.cpp",
        "%{prj.name}/vendor/glm/glm/**.hpp",
        "%{prj.name}/vendor/glm/glm/**.inl"
    }

    includedirs
    {
        "%{prj.name}/src",
        "%{includeDir.spdlog}",
        "%{includeDir.GLFW}",
        "%{includeDir.glad}",
        "%{includeDir.imgui}",
        "%{includeDir.glm}"
    }


    filter "system:windows"
        systemversion "latest"

        links
        {
            "GLFW",
            "glad",
            "imgui",
            "opengl32.lib",
        }

        defines 
        {
            "NX_PT_WIN",
            "GLFW_INCLUDE_NONE",
            "_CRT_SECURE_NO_WARNINGS"
        }

    filter "system:macosx"
        links {
            "GLFW",
            "glad",
            "imgui",
            "Cocoa",
            "CoreVideo",
            "OpenGL",
            "IOKit"
        }

        defines {
            "NX_PT_OSX",
            "GLFW_INCLUDE_NONE",
            "_CRT_SECURE_NO_WARNINGS"   
        }

    filter "configurations:Debug"
        defines "NX_DEBUG"
        symbols "on"
        runtime "Debug"

    filter "configurations:Release"
        defines "NX_RELEASE"
        optimize "on"
        runtime "Release"

    filter "configurations:Dist"
        defines "NX_DIST"
        optimize "on"
        runtime "Release"



project "NXSandbox"
    location "NXSandbox"
    kind "ConsoleApp"
    language "C++"
    cppdialect "C++17"
    staticruntime "on"

    targetdir ("bin/" .. outputdir .. "/%{prj.name}")
    objdir ("bin-int/" .. outputdir .. "/%{prj.name}")

    files {
        "%{prj.name}/src/**.h",
        "%{prj.name}/src/**.cpp"
    }

    includedirs {
        "Neurex/vendor/spdlog/include",
        "Neurex/src",
        "Neurex/vendor",
        "%{includeDir.glm}",
    }

    links {
        "Neurex"
    }

    filter "system:windows"
        systemversion "latest"

        defines { "NX_PT_WIN" }

    filter "system:macosx"
        links {
            "Cocoa",
            "IOKit",
            "OpenGL",
            "CoreVideo"
        }

        defines {
            "NX_PT_OSX",
            "GLFW_INCLUDE_NONE",
            "_CRT_SECURE_NO_WARNINGS"
        }

    filter "configurations:Debug"
        defines "NX_DEBUG"
        symbols "On"
        runtime "Debug"

    filter "configurations:Release"
        defines "NX_RELEASE"
        optimize "On"
        runtime "Release"

    filter "configurations:Dist"
        defines "NX_DIST"
        optimize "On"
        runtime "Release"

静态库编译,沙盒提供链接问题。

我正在使用 Apple Clang v13.0.0、GNU Make 3.81、premake5.0.0 alpha 16。

标签: macosclanglinker-errorspremake

解决方案


通过在框架声明中添加“.framework”解决了这个问题:

Cocoa -> Cocoa.framework

推荐阅读