Ошибка связывания Im Gui (LNK4098: defaultlib 'msvcrtd.lib' конфликтует с im gui) - PullRequest
0 голосов
/ 08 мая 2020

Я использую Im Gui + GLFW + GLAD и связываю его с моей библиотекой, а затем компилирую проект. Создание проекта выполнено с помощью premake5. Все библиотеки работают хорошо, но с Im Gui это дает мне ошибку Linking (извините за русский язык, VS не хочет менять мои сообщения об ошибках на Engli sh):

1>------ Build started: Project: Sandbox, Configuration: Debug x64 ------
1>LIBCMTD.lib(initializers.obj) : warning LNK4098: библиотека по умолчанию "msvcrtd.lib" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ strncpy импортирован в функцию "void __cdecl ImStrncpy(char *,char const *,unsigned __int64)" (?ImStrncpy@@YAXPEADPEBD_K@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ _wassert импортирован в функцию "bool __cdecl ImGui::DebugCheckVersionAndDataLayout(char const *,unsigned __int64,unsigned __int64,unsigned __int64,unsigned __int64,unsigned __int64,unsigned __int64)" (?DebugCheckVersionAndDataLayout@ImGui@@YA_NPEBD_K11111@Z)
1>imguid.lib(imgui_draw.cpp.obj) : warning LNK4049: импортирован локально определенный символ _wassert
1>imguid.lib(imgui_widgets.cpp.obj) : warning LNK4049: импортирован локально определенный символ _wassert
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ __acrt_iob_func импортирован в функцию "void __cdecl ImGui::LogToTTY(int)" (?LogToTTY@ImGui@@YAXH@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ fclose импортирован в функцию "void __cdecl ImGui::LogFinish(void)" (?LogFinish@ImGui@@YAXXZ)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ fflush импортирован в функцию "void __cdecl ImGui::LogFinish(void)" (?LogFinish@ImGui@@YAXXZ)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ fread импортирован в функцию "void * __cdecl ImFileLoadToMemory(char const *,char const *,unsigned __int64 *,int)" (?ImFileLoadToMemory@@YAPEAXPEBD0PEA_KH@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ fseek импортирован в функцию "void * __cdecl ImFileLoadToMemory(char const *,char const *,unsigned __int64 *,int)" (?ImFileLoadToMemory@@YAPEAXPEBD0PEA_KH@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ ftell импортирован в функцию "void * __cdecl ImFileLoadToMemory(char const *,char const *,unsigned __int64 *,int)" (?ImFileLoadToMemory@@YAPEAXPEBD0PEA_KH@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ fwrite импортирован в функцию "void __cdecl ImGui::SaveIniSettingsToDisk(char const *)" (?SaveIniSettingsToDisk@ImGui@@YAXPEBD@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ __stdio_common_vfprintf импортирован в функцию _vfprintf_l
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ __stdio_common_vsprintf импортирован в функцию _vsnprintf_l
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ __stdio_common_vsscanf импортирован в функцию _vsscanf_l
1>imguid.lib(imgui_widgets.cpp.obj) : warning LNK4049: импортирован локально определенный символ __stdio_common_vsscanf
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ free импортирован в функцию "void __cdecl ImGui::RenderWindowTitleBarContents(struct ImGuiWindow *,struct ImRect const &,char const *,bool *)" (?RenderWindowTitleBarContents@ImGui@@YAXPEAUImGuiWindow@@AEBUImRect@@PEBDPEA_N@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ malloc импортирован в функцию "void __cdecl ImGui::RenderWindowTitleBarContents(struct ImGuiWindow *,struct ImRect const &,char const *,bool *)" (?RenderWindowTitleBarContents@ImGui@@YAXPEAUImGuiWindow@@AEBUImRect@@PEBDPEA_N@Z)
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ qsort импортирован в функцию "public: void __cdecl ImGuiStorage::BuildSortByKey(void)" (?BuildSortByKey@ImGuiStorage@@QEAAXXZ)
1>imguid.lib(imgui_draw.cpp.obj) : warning LNK4049: импортирован локально определенный символ qsort
1>imguid.lib(imgui_widgets.cpp.obj) : warning LNK4049: импортирован локально определенный символ qsort
1>imguid.lib(imgui.cpp.obj) : warning LNK4217: локально определенный символ toupper импортирован в функцию "int __cdecl ImStricmp(char const *,char const *)" (?ImStricmp@@YAHPEBD0@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : warning LNK4217: локально определенный символ powf импортирован в функцию "float __cdecl ImPow(float,float)" (?ImPow@@YAMMM@Z)
1>imguid.lib(imgui.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp__wfopen в функции "struct _iobuf * __cdecl ImFileOpen(char const *,char const *)" (?ImFileOpen@@YAPEAU_iobuf@@PEBD0@Z)
1>imguid.lib(imgui.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_fmodf в функции "float __cdecl ImFmod(float,float)" (?ImFmod@@YAMMM@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : error LNK2001: неразрешенный внешний символ "__imp_fmodf"
1>imguid.lib(imgui.cpp.obj) : error LNK2001: неразрешенный внешний символ "__GSHandlerCheck_EH4"
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2001: неразрешенный внешний символ "__GSHandlerCheck_EH4"
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_acosf в функции "float __cdecl ImAcos(float)" (?ImAcos@@YAMM@Z)
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_ceilf в функции "float __cdecl ImCeil(float)" (?ImCeil@@YAMM@Z)
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_cosf в функции "float __cdecl ImCos(float)" (?ImCos@@YAMM@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : error LNK2001: неразрешенный внешний символ "__imp_cosf"
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_floorf в функции "float __cdecl ImFloorStd(float)" (?ImFloorStd@@YAMM@Z)
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_sinf в функции "float __cdecl ImSin(float)" (?ImSin@@YAMM@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : error LNK2001: неразрешенный внешний символ "__imp_sinf"
1>imguid.lib(imgui_draw.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_sqrtf в функции "float __cdecl ImSqrt(float)" (?ImSqrt@@YAMM@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_atof в функции "double __cdecl ImAtof(char const *)" (?ImAtof@@YANPEBD@Z)
1>imguid.lib(imgui_widgets.cpp.obj) : error LNK2019: ссылка на неразрешенный внешний символ __imp_atan2f в функции "float __cdecl ImAtan2(float,float)" (?ImAtan2@@YAMMM@Z)
1>..\bin\Debug-windows-x86_64\Sandbox\Sandbox.exe : fatal error LNK1120: неразрешенных внешних элементов: 11
1>Done building project "Sandbox.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 4 up-to-date, 0 skipped ==========

Это мой файл premake для проекта:

workspace "Hexy"
    architecture "x64"

    configurations
    {
        "Debug",
        "Release"
    }

    flags
    {
        "MultiProcessorCompile"
    }

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

IncludeDir = {}
IncludeDir["GLFW"] = "Hexy/vendor/GLFW/include"
IncludeDir["Glad"] = "Hexy/vendor/Glad/include"
IncludeDir["ImGui"] = "Hexy/vendor/imgui"

group "Dependencies"

include "Hexy/vendor/GLFW"
include "Hexy/vendor/Glad"
include "Hexy/vendor/ImGui"

group ""

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

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

    pchheader "pch.h"
    pchsource "Hexy/src/pch.cpp"

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

    includedirs
    {
        "%{prj.name}/src",
        "%{IncludeDir.GLFW}",
        "%{IncludeDir.Glad}",
        "%{IncludeDir.ImGui}"
    }

    links 
    { 
        "GLFW",
        "Glad",
        "ImGui",
        "opengl32.lib"
    }

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

        defines
        {
            "_CRT_SECURE_NO_WARNINGS",
            "GLFW_INCLUDE_NONE"
        }


    filter "configurations:Debug"
        symbols "On"

    filter "configurations:Release"
        optimize "On"


project "Sandbox"
    location "Sandbox"
    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
    {
        "Hexy/src",
        "%{IncludeDir.GLFW}",
        "%{IncludeDir.Glad}",
        "%{IncludeDir.ImGui}"
    }

    links
    {
        "Hexy"
    }

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



    filter "configurations:Debug"
        symbols "On"

    filter "configurations:Release"
        optimize "On"

    filter "configurations:Dist"
        optimize "On"

premake для Im Gui проект:

project "ImGui"
    kind "StaticLib"
    language "C++"
    systemversion "latest"
    cppdialect "C++17"
    staticruntime "On"

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

    files
    {
        "imconfig.h",
        "imgui.h",
        "imgui.cpp",
        "imgui_draw.cpp",
        "imgui_internal.h",
        "imgui_widgets.cpp",
        "imstb_rectpack.h",
        "imstb_textedit.h",
        "imstb_truetype.h",
        "imgui_demo.cpp"
    }

    filter "system:windows"


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

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

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

Во всех моих проектах я использую один и тот же параметр компилятора / MT.

...