问题描述
这是我的第一个问题,所以我将尽力解释有关我的问题的所有信息。因此,我下载了Clion来为我的大学学位编写第一个C程序。因此,当我在C上创建一个简单的Hello World时,我可以正常运行,但是如果我创建一个新程序或一个新的hello world,则该程序将失败,并在Clion上出现以下错误:
> ====================[ Build | MeusCodigosC_2_0 | Debug ]======================== "C:\Program Files\JetBrains\CLion
> 2020.2.1\bin\cmake\win\bin\cmake.exe" --build "C:\Users\salom\CLionProjects\MeusCodigosC 2.0\cmake-build-debug"
> --target MeusCodigosC_2_0 -- -j 12 Scanning dependencies of target MeusCodigosC_2_0 [ 33%] Building C object
> CMakeFiles/MeusCodigosC_2_0.dir/AtividadeProducaoLabU2.c.obj [ 66%]
> Building C object CMakeFiles/MeusCodigosC_2_0.dir/HelloWorld.c.obj
> [100%] Linking C executable MeusCodigosC_2_0.exe
> c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:
> CMakeFiles\MeusCodigosC_2_0.dir/objects.a(HelloWorld.c.obj): na
> função "main": C:/Users/salom/CLionProjects/MeusCodigosC
> 2.0/HelloWorld.c:7: múltiplas definições de "main"; CMakeFiles\MeusCodigosC_2_0.dir/objects.a(AtividadeProducaoLabU2.c.obj):C:/Users/salom/CLionProjects/MeusCodigosC
> 2.0/AtividadeProducaoLabU2.c:32: definido primeiro aqui collect2.exe: error: ld returned 1 exit status mingw32-make.exe[3]: ***
> [MeusCodigosC_2_0.exe] Error 1 mingw32-make.exe[2]: ***
> [CMakeFiles/MeusCodigosC_2_0.dir/all] Error 2 mingw32-make.exe[1]: ***
> [CMakeFiles/MeusCodigosC_2_0.dir/rule] Error 2 mingw32-make.exe: ***
> [MeusCodigosC_2_0] Error 2
> CMakeFiles\MeusCodigosC_2_0.dir\build.make:119: recipe for target
> 'MeusCodigosC_2_0.exe' failed CMakeFiles\Makefile2:94: recipe for
> target 'CMakeFiles/MeusCodigosC_2_0.dir/all' failed
> CMakeFiles\Makefile2:101: recipe for target
> 'CMakeFiles/MeusCodigosC_2_0.dir/rule' failed Makefile:137: recipe for
> target 'MeusCodigosC_2_0' failed
我检查了我的CMakeLists.txt,我读到它是使您的代码运行的文件,并且新代码已添加到目标中,但是我仍然无法运行它。我发现的唯一解决方法是删除我未使用的旧代码,只保留要在特定时刻使用的代码,然后我才能在Clion上运行C代码。有人已经遇到过这样的问题吗?谢谢!
解决方法
该错误消息表明(如果我正确理解葡萄牙语),编译文件中定义了多个main
函数。
main()
是在执行程序时运行的功能。几个具有相同名称的函数意味着编译器不知道您要运行哪个函数。
如果要编写几个不同的程序,只需将它们放在单独的文件夹中,或确保CMakeLists.txt
仅包括其中一个。
UPD:CLion似乎支持一个创建多个可执行文件的项目。参见documentation。
对于您来说,CMakeFile.txt
应该包含两行(可能需要更正文件名):
add_executable(hello_world HelloWorld.c)
add_executable(MeusCodigosC_2_0 AtividadeProducaoLabU2.c)
如果HelloWorld和Lab2应该共享一些代码,则可以将其提取到一个单独的文件中,例如common.c
,然后更新项目以说
,add_executable(hello_world HelloWorld.c common.c)
add_executable(MeusCodigosC_2_0 AtividadeProducaoLabU2.c common.c)
我在 clion 中遇到了这个问题,我解决了这个问题。我刚刚打开了一个新项目,它确实有效。 看起来很容易修复,但我第一次使用它,所以对我来说有点困难:)