Ziggo-CaaS-Switch软件配置: undefined reference to pthread_create

Ziggo-CaaS-Switch软件配置编译错误:

88% Built target time_sync_app

Scanning dependencies of target time_sync

91% Building C object CMakeFiles/time_sync.dir/time_sync_main_loop.c.o

94% Linking C executable time_sync

/usr/bin/ld: CMakeFiles/time_sync.dir/time_sync_main_loop.c.o: in function `main':

time_sync_main_loop.c:(.text+0x1be3): undefined reference to `pthread_create'

collect2: error: ld returned 1 exit status

make2: *** CMakeFiles/time_sync.dir/build.make:85: time_sync Error 1

make1: *** CMakeFiles/Makefile2:80: CMakeFiles/time_sync.dir/all Error 2

make: *** Makefile:84: all Error 2

**错误分析:**pthread_create 属于线程库,当前链接 time_sync 时没有把线程库真正带进去,所以在最后 ld 阶段失败。其实,undefined reference to pthread_create 是典型的"编译时带了 -lpthread,但链接阶段没有正确链接线程库"的问题。你这个仓库的 CMakeLists.txt 把 -lpthread 塞进了 CMAKE_C_FLAGS,这并不可靠,尤其在可执行文件链接阶段经常失效。

解决步骤:

直接改交换机软件目录下的 CMakeLists.txt:

xx/Ziggo-CaaS-Switch-main/Ziggo-CaaS-Switch-main/Software/Time-Synchronization/CMakeLists.txt

把末尾这两段:

bash 复制代码
add_executable(time_sync time_sync_main_loop.c)
target_link_libraries(time_sync ${PROJECT_NAME})

add_executable(switch_config switch_config_main.c)
target_link_libraries(switch_config ${PROJECT_NAME})

改成更稳妥的写法:

bash 复制代码
find_package(Threads REQUIRED)

add_executable(time_sync time_sync_main_loop.c)
target_link_libraries(time_sync ${PROJECT_NAME} Threads::Threads m)

add_executable(switch_config switch_config_main.c)
target_link_libraries(switch_config ${PROJECT_NAME} Threads::Threads m)

如果你的环境里 Threads::Threads 解析有问题,也可以先用简单版本:

bash 复制代码
target_link_libraries(time_sync ${PROJECT_NAME} pthread m)
target_link_libraries(switch_config ${PROJECT_NAME} pthread m)

然后重新构建,最好清掉原来的 build 目录重新跑一遍:

bash 复制代码
cd /path/to/Software/Time-Synchronization
rm -rf build
mkdir build
cd build
cmake ..
make -j
相关推荐
Terra.K10 小时前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队11 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
Super 含11 小时前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
counting money11 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk55511 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
峥无12 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率11520012 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
程序员小八77712 小时前
上海百度B端java后端日常实习一面
java·开发语言
wp123_112 小时前
IPX8 防水 Type‑C连接器:安费诺 124018792112A 与 TONEVEE TY48087‑24A 技术梳理
c语言·开发语言
不会代码的小猴12 小时前
3. 控件学习1
开发语言·c++·笔记·qt·算法