sdl2-pointerless icon indicating copy to clipboard operation
sdl2-pointerless copied to clipboard

Fails to compile

Open kneardhead opened this issue 2 years ago • 3 comments

I am beginner and I tried to compile it using the cmake .. and I get a pthread error.

CMake Error at cmake/sdl2/FindSDL2.cmake:243 (message):
  Could NOT find Threads (Threads is required by SDL2).
Call Stack (most recent call first):
  CMakeLists.txt:51 (find_package)

And the CMakeOutput.log is,

Determining if the include file pthread.h exists passed with the following output:
Change Dir: /home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_8ee73/fast && /usr/bin/gmake  -f CMakeFiles/cmTC_8ee73.dir/build.make CMakeFiles/cmTC_8ee73.dir/build
gmake[1]: Entering directory '/home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_8ee73.dir/CheckIncludeFile.c.o
/usr/bin/cc    -o CMakeFiles/cmTC_8ee73.dir/CheckIncludeFile.c.o -c /home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c
Linking C executable cmTC_8ee73
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8ee73.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/cmTC_8ee73.dir/CheckIncludeFile.c.o -o cmTC_8ee73
gmake[1]: Leaving directory '/home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp'



Performing C SOURCE FILE Test CMAKE_HAVE_LIBC_PTHREAD succeeded with the following output:
Change Dir: /home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp

Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_58b33/fast && /usr/bin/gmake  -f CMakeFiles/cmTC_58b33.dir/build.make CMakeFiles/cmTC_58b33.dir/build
gmake[1]: Entering directory '/home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_58b33.dir/src.c.o
/usr/bin/cc -DCMAKE_HAVE_LIBC_PTHREAD   -o CMakeFiles/cmTC_58b33.dir/src.c.o -c /home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp/src.c
Linking C executable cmTC_58b33
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_58b33.dir/link.txt --verbose=1
/usr/bin/cc CMakeFiles/cmTC_58b33.dir/src.c.o -o cmTC_58b33
gmake[1]: Leaving directory '/home/zabit/Documents/study/code-learn/sdl-lazy-foo/sdl2-pointerless/build/CMakeFiles/CMakeTmp'


Source file was:
#include <pthread.h>

static void* test_func(void* data)
{
  return data;
}

int main(void)
{
  pthread_t thread;
  pthread_create(&thread, NULL, test_func, NULL);
  pthread_detach(thread);
  pthread_cancel(thread);
  pthread_join(thread, NULL);
  pthread_atfork(NULL, NULL, NULL);
  pthread_exit(NULL);

  return 0;
}

I have downloaded the required dependencies.

kneardhead avatar Feb 14 '23 17:02 kneardhead

And yes, I am using Ubuntu 22.04 LTS (if that's necessary)

kneardhead avatar Feb 14 '23 17:02 kneardhead

if you cannot compile src/main.c using gcc then try to simply use g++ due main.c is actually contain c++ specific code

ghost avatar Jun 14 '23 07:06 ghost

I changed the Threads dependency checking in FindSDL2.cmake to this code and it compiles, though I don't know if this causes bugs in other systems:

if(NOT APPLE)
  set(CMAKE_THREAD_PREFER_PTHREAD ON)
  find_package(Threads QUIET)
  if(CMAKE_USE_PTHREADS_INIT)
    set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-pthread")
  elseif(NOT CMAKE_THREAD_LIBS_INIT)
    set(SDL2_THREADS_NOT_FOUND "Could NOT find Threads (Threads is required by SDL2).")
    if(SDL2_FIND_REQUIRED)
      message(FATAL_ERROR ${SDL2_THREADS_NOT_FOUND})
    else()
        if(NOT SDL2_FIND_QUIETLY)
          message(STATUS ${SDL2_THREADS_NOT_FOUND})
        endif()
      return()
    endif()
    unset(SDL2_THREADS_NOT_FOUND)
  endif()
endif()

ej159 avatar Dec 21 '23 12:12 ej159