c++ - 将 lua 嵌入到 C++ 中但得到未解决的外部:floor、freopen 和 strcoll
问题描述
我将 lua 嵌入到 c++ vs2019 解决方案中,它导致将错误链接到基本 c 库(__imp_freopen
和__imp_floor
)__imp_strcoll
。
lua 在它自己的项目中编译为静态 c 库并链接到主项目,但是使用时luaL_newstate();
我得到未解析的外部符号freopen(...)
,floor(...)
和strcmp(...)
.
我最好的猜测是这个错误来自我的构建系统(premake5),因为当我使用 vs2019 手动添加项目时,没有链接错误,但由于我经常跨操作系统处理这个项目,所以 premake 不能正常工作会带来很多问题。我将不胜感激有关如何缩小问题范围的任何想法。
lua 的预制:
project "lua"
kind "StaticLib"
language "C"
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
objdir ("bin-int/" .. outputdir .. "/%{prj.name}")
files
{
"src/**.c",
"src/**.h",
"src/lua.hpp"
}
excludes
{
"src/lua.c",
"src/luac.c"
}
filter "configurations:Debug"
runtime "Debug"
symbols "on"
filter "configurations:Release"
runtime "Release"
optimize "on"
解决方案的相关预制:
workspace "solution"
architecture "x86_64"
startproject "test"
configurations
{
"Debug",
"Release"
}
flags
{
"MultiProcessorCompile"
}
outputdir = "%{cfg.buildcfg}-%{cfg.system}-%{cfg.architecture}"
IncludeDir = {}
IncludeDir["GLFW"] = "engine/vendor/GLFW/include"
IncludeDir["Glad"] = "engine/vendor/Glad/include"
IncludeDir["ImGui"] = "engine/vendor/imgui"
IncludeDir["glm"] = "engine/vendor/glm"
IncludeDir["stb_image"] = "engine/vendor/stb_image"
IncludeDir["lua"] = "engine/vendor/lua"
group "dependencies"
include "engine/vendor/GLFW"
include "engine/vendor/Glad"
include "engine/vendor/imgui"
include "engine/vendor/lua"
group ""
project "engine"
location "engine"
kind "StaticLib"
language "C++"
cppdialect "C++17"
staticruntime "on"
targetdir ("bin/" .. outputdir .. "/%{prj.name}")
objdir ("bin-int/" .. outputdir .. "/%{prj.name}")
pchheader "pch.h"
pchsource "engine/src/pch.cpp"
files
{
"%{prj.name}/src/**.h",
"%{prj.name}/src/**.cpp",
"%{prj.name}/vendor/stb_image/**.h",
"%{prj.name}/vendor/stb_image/**.cpp",
"%{prj.name}/vendor/glm/glm/**.hpp",
"%{prj.name}/vendor/glm/glm/**.inl"
}
defines
{
"_CRT_SECURE_NO_WARNINGS",
"GLFW_INCLUDE_NONE"
}
includedirs
{
"%{prj.name}/src",
"%{prj.name}/vendor/spdlog/include",
"%{IncludeDir.GLFW}",
"%{IncludeDir.Glad}",
"%{IncludeDir.ImGui}",
"%{IncludeDir.glm}",
"%{IncludeDir.stb_image}",
"%{IncludeDir.lua}"
}
links
{
"GLFW",
"Glad",
"ImGui",
"opengl32.lib",
"lua"
}
filter "configurations:Debug"
runtime "Debug"
optimize "off"
symbols "on"
filter "configurations:Release"
runtime "Release"
optimize "on"
project "test"
location "test"
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",
"%{prj.name}/*.cpp"
}
includedirs
{
"engine/vendor/spdlog/include",
"engine/src",
"engine/vendor",
"%{IncludeDir.GLFW}",
"%{IncludeDir.Glad}",
"%{IncludeDir.ImGui}",
"%{IncludeDir.glm}"
}
links
{
"engine"
}
filter "configurations:Debug"
runtime "Debug"
symbols "on"
filter "configurations:Release"
runtime "Release"
optimize "on"
lua.hpp 只包含在 lua_script.cpp 中class lua_script {...};
解决方案
推荐阅读
- python - 噪声过滤器(Savitzki Golay)和插值(interp1d)Python有什么区别
- angular - ngIf 多个条件不适用于 router.url
- ios - 如果所有文本字段都完整,则在 swift 4 中正确显示消息?
- android - 如何使用 webview 从资产中保存文件
- google-analytics - 用于优化 ID 的 GTAG
- google-cloud-platform - 谷歌云错误。404 在此服务器上未找到请求的 URL,但它存在
- c - 我们可以在 printf 中传递指针吗?
- c# - 在 Windows 中确定进程终止的操作
- c - 找出一个数字是否完美的程序
- linux - 无法连接到服务器:Linux 的 windows 子系统中 ubuntu 上的 postgresql