CMake can't find pthread

61,923

I have answered this question on StackOverflow.

Short answer: it's a CMake bug which I have reported and offered a patch.

Share:
61,923

Related videos on Youtube

Claudiu
Author by

Claudiu

Graduated from Brown University. E-mail: [email protected]

Updated on September 18, 2022

Comments

  • Claudiu
    Claudiu over 1 year

    pthreads works on the system:

    $ gcc -o what what.c
    /tmp/ccI6m52b.o: In function `main':
    what.c:(.text+0x37): undefined reference to `pthread_create'
    what.c:(.text+0x48): undefined reference to `pthread_join'
    collect2: error: ld returned 1 exit status
    $ gcc -pthread -o what what.c
    $ ./what
    In the thread.
    

    However, when I run cmake with the following bare-bones CMakeLists.txt:

    cmake_minimum_required(VERSION 2.8.6)
    FIND_PACKAGE (Threads)
    

    The output is:

    -- Could NOT find Threads (missing:  Threads_FOUND)
    

    What gives? Error log states:

    /usr/bin/cc   -std=c11 -D_GNU_SOURCE   -Wall -Wextra -Wpointer-arith -Wundef -Wvla -Wwrite-strings -Werror -Wno-error=extra -Wno-error=deprecated-declarations -Wno-error=sign-compare -Wno-error=strict-aliasing -Wno-error=type-limits -Wno-unused-parameter -Wno-error=unused-variable -Wno-error=undef -Wno-error=uninitialized -Wlogical-op -Wno-error=maybe-uninitialized -Waggregate-return -Wnested-externs -Wold-style-definition -Wstrict-prototypes -march=native    -o CMakeFiles/cmTryCompileExec2533162744.dir/CheckIncludeFiles.c.o   -c /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c
    /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5: 
         error: function declaration isn’t a prototype [-Werror=strict-prototypes]
     int main(){return 0;}
     ^
    /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c: 
         In function ‘main’:
    /mnt/shared/fooproj/build/release/CMakeFiles/CMakeTmp/CheckIncludeFiles.c:5:5: 
         error: old-style function definition [-Werror=old-style-definition]
    cc1: all warnings being treated as errors
    [...]
    Source:
    /* */
    #include <pthread.h>
    
    
    int main(){return 0;}