CLion 运行报错解决

代码正确,但是一直提示错误

undefined reference to `PrintHandler::PrintHandler(Looper*)'
collect2.exe: error: ld returned 1 exit status

无意中发现自己运行的是 main.cpp 而不是整个项目,运行整个项目就会正常了。

具体原因见 AI

这是一个 CLion 或 CMake 配置相关的问题,不是代码逻辑问题,而是你在运行 main.cpp 文件单独作为“单文件运行”时,编译器没有正确链接整个项目的所有 .cpp 文件(例如 Looper.cppPrintHandler.cpp 等),从而导致:

undefined reference to `Looper::postMessage(...)`
undefined reference to `vtable for PrintHandler`
...

✅ 原因详解

CLion 中点击右键运行 main.cpp 文件 时:

它会临时生成一个只编译 main.cpp 的目标,没有链接你项目中定义的其他源文件(.cpp),所以报链接错误。

而你点击的是:

右键 main.cpp → Run main.cpp

只运行单文件,不会编译整个项目。


✅ 正确做法

请始终使用:

Run 'EmployeeSystem'Run '<your_target_name>'

也就是你在 CMakeLists.txt 中通过 add_executable() 定义的那个目标,例如:

add_executable(EmployeeSystem
    main.cpp
    Looper.cpp
    Message.cpp
    PrintHandler.cpp
    ...
)

在 CLion 里:

  • 点击右上角运行配置的下拉按钮,选择 EmployeeSystem
  • 或者点绿色小锤子和绿色三角形按钮来 Build / Run 项目

✅ 避免误操作建议

你可以设置默认只运行 CMake 目标:

  1. 打开 Run → Edit Configurations
  2. 确保你运行的是 CMake Application 类型(不是 main.cpp
  3. 删除 main.cpp 的运行配置(避免误点)

✅ 总结

操作后果
✅ 运行整个项目(CMake目标)正常链接所有模块
❌ 只运行 main.cpp缺少链接,报错

你项目现在已经没问题了,只是 CLion 使用方式上的误区。后续只运行项目名对应的目标就不会出错了 ✅

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇