Для pthread_mutex_init вы хотите скомпилировать / связать с опцией -pthread:
g++ -static -pthread -o"MyProgram" ./main.o -lboost_thread
Проблема в том, что такие функции, как pthread_mutex_init, находятся в отдельной библиотеке. Динамические библиотеки могут включать метаданные для факта, что ему нужна отдельная библиотека (поэтому libboost_thread.so включает в себя тот факт, что ей нужен libpthread).
Но статические библиотеки не имеют этой информации. Поэтому вам нужно предоставить ссылку на все необходимые библиотеки, когда вы создаете статическую ссылку.
Что касается использования -pthread
вместо -lpthread
, это несколько предпочтительнее, поскольку он не только связывает необходимую библиотеку, но и предоставляет любые другие опции, которые следует использовать (например, -D_REENTRANT
для компилятора).