weixin_57754298 2024-05-04 16:16 采纳率: 0%
浏览 6
已结题

stm32开发clion时遇到的编译问题

在构建时报错不知怎么解决

img

img

img

网上查了很多方法但是没有解决,有的让改cmakelists的内容,但是我src下没有改文件是后来自己创建的。

  • 写回答

23条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-04 16:17
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    从提供的错误信息来看,主要存在两个问题:一是有多个main函数的定义,二是编译器在处理CMakeFiles目录下的CompilerIdC*CompilerIdCXX*文件时遇到了重复定义的符号。下面我会逐一解释并提供可能的解决方案。

    问题一:多个main函数定义

    错误信息显示在D:\BS\test\EDN\BS\Core\Src/main.c:91有多重定义的main函数。每个程序只能有一个main函数作为程序的入口点。请检查以下几个方面:

    1. 确认main.c文件:确保你的项目中只有一个main.cmain.cpp文件,并且它只包含一个main函数。

    2. 检查其他源文件:确认没有其他源文件(比如display.cgetc.c等)错误地包含了main函数的定义。

    3. 链接问题:有时候,如果你的CMake配置错误,可能会导致多个源文件被意外地编译并链接到一起。确保CMakeLists.txt正确指定了要编译的源文件。

    解决方案:

    • 检查并修正main函数:确保仅在一处定义main函数。如果其他文件误包含了main函数,请移除这些定义。

    问题二:重复定义的编译器检查符号

    错误信息还提到在CompilerIdC*CompilerIdCXX*文件中有重复定义的符号,比如info_archinfo_platforminfo_compiler。这些文件通常由CMake在首次配置项目时自动生成,用于检测编译器的能力。错误表明这些文件可能被意外地加入了最终的编译和链接过程中。

    解决方案:

    1. 检查CMakeLists.txt:确保这些文件没有被错误地添加到你的可执行目标的源文件列表中。例如,确保没有类似下面这样的错误行:

      add_executable(BS.elf main.c display.c getc.c CMakeFiles/3.28.1/CompilerIdC/CMakeCCompilerId.c)
      

      应该确保只有你的实际源文件被列出:

      add_executable(BS.elf main.c display.c getc.c)
      
    2. 清理构建文件:由于这些错误可能是由于之前的构建配置遗留下来的,尝试完全清理并重新生成构建文件。可以使用CMake的清理命令:

      rm -rf cmake-build-debug
      cmake ..
      make
      

      或者如果你使用的是Windows环境和MinGW,使用对应的命令清除构建目录后重新运行CMake和构建。

    3. 检查CMake缓存:确保没有遗留的配置选项影响到了编译过程。你可以通过删除CMakeCache.txt文件来强制CMake重新配置项目。

    总结:

    • 首先,确保你的项目结构清晰,只有一个正确的main函数定义。
    • 其次,检查并修正CMakeLists.txt文件,确保没有不必要的文件被添加到可执行目标的源文件列表中。
    • 最后,进行彻底的清理并重新配置构建环境,以消除任何可能的遗留问题。

    希望这些建议能帮助你解决问题。如果问题依旧,可能需要更详细的项目配置信息来进行进一步分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 修改了问题 5月4日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示
  • ¥15 MATLAB有限差分法解一维边值问题
  • ¥200 内网渗透测试 横向渗透 Windows漏洞 Windows权限维持
  • ¥15 数据结构图的相关代码实现
  • ¥15 python中aiohttp.client_exceptions.ContentTypeError
  • ¥30 DeepLung肺结节检测生成最大froc值对应的epoch报错
  • ¥15 信号发生器如何将频率调大,步尽值改成10
  • ¥15 keil 5 编程智能家具,风扇台灯开关,人体感应等
  • ¥100 找一名渗透方面的专家