多个main函数的定义

4
我如何在C++程序中正确地实现Lua?我下载了Lua源代码,将.c文件放入我的src文件夹中,.h文件放入include文件夹中,在我的程序源代码中包含了lua.h(当然要用extern "C"{}),并点击“构建”。
这就是所有教程告诉我的使用Lua与C ++项目的方法。
但是现在我遇到了“main的多重定义”错误,以及Lua代码中无法解决的一些符号。我理解第一个错误的意思(冲突,因为Lua有一个main函数,而我的程序也有一个),但我该如何解决呢?
或者我对在C++程序中实现Lua的理解完全错误了吗?
3个回答

12

请检查您的源代码,确保没有包含luac.clua.c以及任何其他与Lua一起提供的程序源代码。 Lua的源代码包括一些额外的实用工具(例如luac),很可能您已经将它们包含在项目中并忘记删除它们,从而导致有多个main

简而言之,那些是独立的程序,您不需要将它们添加到项目中。如果可以的话,只需正常构建Lua,链接库并像平常一样包含头文件即可。

所以,关于你对如何使用Lua的误解,你可能确实有些误解。完全有可能将Lua的源代码复制到你的代码中,但这可能不是一个好主意。你真正想做的是在终端中打开提取的Lua源码并构建它。然后(根据Lua的INSTALL文档),你需要键入make platform,其中你将用当前正在使用的平台替换platform(例如,我会使用macosx,你可能使用linux,请参考INSTALL了解支持哪些平台)。之后,你可以选择是否安装它,但你只需执行make install(或sudo make install)即可完成。
之后,在编译时添加适当的链接器标志以与Lua链接(例如,-llua),或者在编辑器中更改项目的设置以做大致相同的事情。也就是说,你需要参考提供给Lua的INSTALL文档以获取完整的说明。

我只包含这些:lua.h、lualib.h和lauxlib.h。这是教程告诉我的。 - blubberbernd
是的,但我指的是.c文件,引用你的话,你“放在[src]文件夹中”。你需要剪切掉不必要的文件,或者更好的方法是从项目中删除Lua,只链接到已编译的库。 - user457812
好的,我会尝试删除lua.c文件。那么库文件在哪里获取?在lua.org上只有源文件可供下载。 - blubberbernd
1
@blubber 你需要自己构建这些库,但是这并不复杂 - 我在我的回答中包含了一些非常基本的指示,但你也可以阅读Lua提供的INSTALL文档,获取更完整且不过度简化的信息。 - user457812
1
@blubberbernd:其实不然,你的观点有些错误。对于未知的库来说或许是正确的,但由于Lua非常受欢迎,Linux开发人员只需要键入类似于“sudo yast install lua-devel”的命令就可以了,无需构建Lua,因为它已经包含在大多数Linux发行版中了。 - Andrejs Cainikovs
显示剩余3条评论

0

我正在将Lua嵌入我的项目中,而我的首选方式是以静态库的方式compiled Lua。


0

只需在Lua.c和Luac.c中注释掉两个main()块,然后再次构建和运行即可。

我是在Lua 5.3上完成的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接