You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake编译C++共享库遇undefined reference to `main'等链接错误求助

问题分析与解决方案

错误根源

1. "undefined reference to `main'" 错误

手动添加的-I/usr/include/c++/等包含路径干扰了CMake的默认编译链接逻辑:CMake会自动处理C++标准库的头文件路径,手动指定错误/冗余的路径会导致链接阶段错误引入可执行文件的启动代码(如Scrt1.o),从而错误要求main函数。

2. 重定位错误(relocation ... recompile with -fPIC)

虽然CMake默认会为SHARED库添加-fPIC(位置无关代码)编译选项,但手动修改CMAKE_CXX_FLAGS的操作可能破坏了这个默认设置,导致编译出的目标文件不满足共享库的要求。


修正后的CMakeLists.txt

cmake_minimum_required(VERSION 3.5)
project(foobar)

# 移除冗余的手动包含路径设置,CMake会自动处理标准库和默认包含目录
# 若需添加额外包含路径,使用target_include_directories(推荐的目标导向语法):
# target_include_directories(foobar PRIVATE ${CMAKE_INCLUDE_PATH})

add_library(foobar SHARED src/foobar.cpp)

验证步骤

  1. 清理旧构建文件:
    rm -rf CMakeCache.txt CMakeFiles/ Makefile
    
  2. 重新生成构建文件并编译:
    cmake .
    make
    

此时会正常生成libfoobar.so共享库,两个链接错误均会被解决。

内容的提问来源于stack exchange,提问作者Étienne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:37:41