# Linux Kernel Module Cheat

##### 11.5.1.1. C++ static and pthreads

`g++` and pthreads also causes issues:

- https://stackoverflow.com/questions/35116327/when-g-static-link-pthread-cause-segmentation-fault-why

- https://stackoverflow.com/questions/58848694/gcc-whole-archive-recipe-for-static-linking-to-pthread-stopped-working-in-rec

As a consequence, the following just hangs as of LKMC ca0403849e03844a328029d70c08556155dc1cd0 + 1 the example userland/cpp/atomic/std_atomic.cpp:

    ./run --userland userland/cpp/atomic/std_atomic.cpp --static

And before that, it used to fail with other randomly different errors, e.g.:

    qemu-x86_64: /path/to/linux-kernel-module-cheat/submodules/qemu/accel/tcg/cpu-exec.c:700: cpu_exec: Assertion `!have_mmap_lock()' failed.
    qemu-x86_64: /path/to/linux-kernel-module-cheat/submodules/qemu/accel/tcg/cpu-exec.c:700: cpu_exec: Assertion `!have_mmap_lock()' failed.

And a native Ubuntu 18.04 AMD64 run with static compilation segfaults.

As of LKMC f5d4998ff51a548ed3f5153aacb0411d22022058 the aarch64 error:

    ./run --arch aarch64 --userland userland/cpp/atomic/fail.cpp --static

is:

    terminate called after throwing an instance of 'std::system_error'
      what():  Unknown error 16781344
    qemu: uncaught target signal 6 (Aborted) - core dumped

The workaround:

    -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive

fixes some of the problems, but not all TODO which were missing?, so we are just skipping those tests for now.