Premake链接到SharedLib的链接不起作用

问题描述 投票:0回答:1

我目前正在尝试学习C ++,并认为做一些OpenGL魔术将是一个不错的主意。除了我自己尝试链接库(GLFW)以外,我看了Premake5教程并遵循了该教程。为Visual Studio 2017生成项目文件时,我以某种方式指定的库未正确链接到项目中。我收到很多类似这样的LINK错误:

glfw3.lib(monitor.c.obj):错误LNK2019:在功能“ _glfwAllocMonitor”中显示符号“ __imp__strdup”。

glfw3.lib(win32_window.c.obj):错误LNK2001:Nichtaufgelöstesexternes符号“ __imp__strdup”。

...

这是我的premake5.lua文件的样子:

workspace "MojoEngine"
architecture "x64"

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

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

project "MojoEngine"
location "MojoEngine"
kind "SharedLib"
language "C++"

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

librarydir = "%{prj.name}/libraries/"

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

includedirs
{
    librarydir .. "GLFW/include",
    "%{prj.name}/vendor/spdlog/include"
}

libdirs
{
    librarydir .. "GLFW/lib"
}

links
{
    "glfw3",
    "glfw3dll"
}

filter "system:windows"
    cppdialect "C++17"
    staticruntime "On"
    systemversion "latest"

    defines
    {
        "ME_PLATFORM_WINDOWS",
        "ME_BUILD_DLL"
    }

    postbuildcommands
    {
        ("{COPY} %{cfg.buildtarget.relpath} ../bin/" .. outputdir .. 
    "/Sandbox"),
        ("{COPY} %{prj.name}/lib/GLFW/glfw3.dll ../bin/" .. outputdir .. 
    "/Sandbox")
    }

filter "configurations:Debug"
    defines "ME_DEBUG"
    symbols "On"

filter "configurations:Release"
    defines "ME_RELEASE"
    optimize "On"

filter "configurations:Dist"
    defines "ME_DIST"
    optimize "On"

project "Sandbox"
location "Sandbox"
kind "ConsoleApp"
language "C++"

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

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

includedirs
{
    "MojoEngine/vendor/spdlog/include",
    "MojoEngine/src"
}

links
{
    "MojoEngine"
}

filter "system:windows"
    cppdialect "C++17"
    staticruntime "On"
    systemversion "latest"

    defines
    {
        "ME_PLATFORM_WINDOWS",
    }

filter "configurations:Debug"
    defines "ME_DEBUG"
    symbols "On"

filter "configurations:Release"
    defines "ME_RELEASE"
    optimize "On"

filter "configurations:Dist"
    defines "ME_DIST"
    optimize "On"
c++ glfw premake
1个回答
1
投票

GLFW Documentation

[在Windows下链接使用静态版本的程序时GLFW,您必须与opengl32链接。在某些版本的MinGW上,您必须还明确链接到gdi32,而其他版本的MinGW包括它在默认库集中以及其他依赖项(如user32和kernel32。如果您使用的是GLU,则还必须链接glu32。

如果使用MinGW,则可能需要将gdi32链接到您的“ MojoEngine”项目。

注:您正在动态链接,因此需要链接opengl32。抱歉,误读了。

© www.soinside.com 2019 - 2024. All rights reserved.