Я использую 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.