Используйте любой редактор для набора вашей программы, а затем скомпилируйте ее с помощью компилятораgcc:
$ gcc t1.c -o t1 -lpthread [-D_REENTRANT] $ ./t1s Hello world!...
Из https://docs.oracle.com/cd/E19455-01/806-5257/compile-4/index.html
Определение _REENTRANT или _POSIX_C_SOURCE
Для поведения POSIX скомпилируйте приложения с установленным флагом -D_POSIX_C_SOURCE> = 199506L. Для поведения Solaris скомпилируйте многопоточные программы с флагом -D_REENTRANT. Это относится к каждому модулю приложения.
Для смешанных приложений (например, потоков Solaris с семантикой POSIX) скомпилируйте с флагами -D_REENTRANT и -D_POSIX_PTHREAD_SEMANTICS.
Чтобы скомпилировать однопоточное приложение, не определяйте ни флаг -D_REENTRANT, ни флаг -D_POSIX_C_SOURCE. Когда эти флаги отсутствуют, все старые определения errno, stdio и т. Д. Остаются в силе.
Примечание -
Компилировать однопоточные приложения, не связанные ни с одной из библиотек потоков (libthread.so.1 или libpthread.so.1), без -D_REENTRANT флаг. Это устраняет снижение производительности, возникающее при преобразовании макросов, таких как putc (3s), в повторяющиеся вызовы функций.
Подводя итог, приложения POSIX, которые определяют -D_POSIX_C_SOURCE, получают семантику POSIX 1003.1c для подпрограмм, перечисленных в таблице 7-1. Приложения, которые определяют только -D_REENTRANT, получают семантику Solaris для этих подпрограмм. Приложения Solaris, которые определяют -D_POSIX_PTHREAD_SEMANTICS, получают семантику POSIX для этих подпрограмм, но все еще могут использовать интерфейс потоков Solaris.
Приложения, которые определяют как -D_POSIX_C_SOURCE, так и -D_REENTRANT, получают семантику POSIX.
BLOCKQUOTE>
Это взято из руководства libc 8.2:
Макрос: _REENTRANT
Макрос: _THREAD_SAFEОни макросы являются устаревшими. Они имеют тот же эффект как определяющий _POSIX_C_SOURCE со значением 199506L.
Некоторые очень старые библиотеки C потребовали, чтобы один из них макросы был определен для основной функциональности (например, getchar), чтобы быть ориентированным на многопотоковое исполнение.
Мы рекомендуем использовать _GNU_SOURCE в новых программах. Если Вы не указываете ‘-ansi’ опция к GCC или другие опции соответствия, такие как-std=c99, и не определяете ни одного из них макросы явно, эффект совпадает с определением _DEFAULT_SOURCE к 1.
При определении тестового макроса функции для запроса большего класса функций, это безопасно для определения, кроме того, тестового макроса функции для подмножества тех функций. Например, если Вы определяете _POSIX_C_SOURCE, затем определение _POSIX_SOURCE также не имеет никакого эффекта. Аналогично, если Вы определяете _GNU_SOURCE, затем определение или _POSIX_SOURCE или _POSIX_C_SOURCE также не имеет никакого эффекта.