如何将静态库编译成gcc,以便Visual Studio编译器可以使用它?

rdlzhqv9  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(133)

我的Windows项目是一个x64动态链接库。现在我将附加lua解释器。我下载了lua-5.4.2_Win64_vc14_lib.zip压缩包(我假设名称中的vc 14表示语言标准版本),我从该压缩包中提取了.lib文件和包含文件,并将其全部添加到我的项目中。
一切都很顺利。
问题是这样的:我确信我需要lua版本5.1.4,而且它必须是一个静态库
但在版本5.1.4的下载列表中,要下载的语言标准的最大编译版本是vc 11
我做了同样的事情,当编译dll时,我得到了错误:LNK 2001未解析外部符号sprintf LNK 2001未解析外部符号__iob_func LNK 2001未解析外部符号fscanf
我了解到,由于语言标准的不同版本(即静态库是用vc 11版本构建的,但dll版本是vc 14)。我尝试用不同版本的标准编译相同版本的lua,这证实了我的假设。在Visual Studio设置中,我可以指定ISO C++14标准的最低版本。
我完全没有使用gcc编译器的经验,也找不到像“PLAT=mingw是什么意思?”“
我尝试了两种解决问题的方法:
1.我试着在visual studio设置中指定一个低于14的语言标准版本,但我不知道如何做到这一点。我试图找到有关这方面的信息,但没有成功。据说,标准14完全结合了标准11并支持它。
1.尝试从源文件编译静态lua库,指定所需的语言标准版本。我尝试使用gcc编译器和mingw 32-make std=c14 PLAT=mingw命令http://lua-users.org/wiki/BuildingLuaInWindowsForNewbies逐步编译lua源文件。我得到是一个“.a”文件,而不是一个lib文件。我试着在我的项目中做这个#pragma注解(lib,“lua51/bin/liblua.a”),仍然看到上面显示的很多编译错误。

v09wglhw

v09wglhw1#

这不是语言标准的问题。您对vc 11、vc 14后缀做了错误的假设,导致了不恰当的解决方案。
一旦编译成机器代码,* 源代码 * 语言就不重要了。vc 11、vc 14是指用于构建库的MSVC编译器的版本,并且可能需要链接到它。
MSVC 14是自Visual Studio 2015以来的编译器版本(有许多子版本)。V11是在Visual Studio 2012中引入的。
我怀疑理解这一点,可能会导致一个不同的解决方案,而不是你提出和询问的解决方案。这是一个X-Y问题。
但是你可能很难获得VS 2012版本,最早的download from Microsoft版本是2013年。您可以从其他地方获得2012 Express(这是一个比当前社区版本更宽松的许可证),但我建议您自担风险。
而是回避了一个问题,为什么你需要这个古董Lua版本摆在首位?Lua 5.1.4于2008年发布。

相关问题