预制链接到SharedLib的操作不起作用(GLFW)

时间:2019-03-27 22:35:04

标签: c++ glfw premake

我目前正在尝试学习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"

1 个答案:

答案 0 :(得分:1)

查看glfw文档。在那里,您必须链接一些针对Windows的库,以用于不同的编译器版本。

GLFW Documentation

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

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

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