GPSTK undefined reference to `pthread_create'undefined reference to `pthread_create', trackerMT.o

来源:互联网 发布:陀螺稳定原理 知乎 编辑:程序博客网 时间:2024/06/09 21:51
undefined reference to `pthread_create'

1. GPSTK jam编译时会出现trackerMT and RX不能连接库文件pthread的问题,如下

cc -lpthread -o apps/swrx/trackerMT apps/swrx/trackerMT.o apps/swrx/simlib.a src/libgpstk.a -lm -lstdc++

apps/swrx/trackerMT.o: In function `RxSim::process()':
trackerMT.cpp:(.text+0x3b4f): undefined reference to `pthread_create'
trackerMT.cpp:(.text+0x3bba): undefined reference to `pthread_join'

2. 解决方案

   A. 在apps/swrx/下找到Jamfile并且将里面的 -lpthread 替换 -pthread即可
  原因因为-pthread会在编译和连接两个阶段都加上 -pthread 标志,但是 -pthread 只在连接阶段增加标志。-pthread会在不同平台上进行不同的操作,但都会是pthreads工作。有时省略-pthread可能大致pthreads不能(正常)工作。

  B.增加-pthread 到 LINKLIBS 替代 在 LINKFLAGS 增加 -pthread

   因为在LINKFLAGS不正确的添加-pthread导致-pthread太早的包含在最终的command line(命令行)中,-pthread会在*。0文件之前使用这个库文件。

关于Jamfile的一些信息将在下一篇博客介绍

0 0