Как скомпилировать многопоточный код с помощью gcc - PullRequest
1 голос
/ 05 июля 2011

Я видел указанные два make-файла следующим образом:

all: thread1 thread2 thread3

CFLAGS=-I/usr/include/nptl -D_REENTRANT
LDFLAGS=-L/usr/lib/nptl -lpthread

clean:
    rm -f thread1 thread2 thread3

######################

all: thread1 thread2 thread3

CFLAGS=-D_REENTRANT
LDFLAGS=-lpthread

clean:
    rm -f thread1 thread2 thread3

Какая корректная командная строка для компиляции thread1.c с gcc?

Без использования make-файлаgcc -o thread1 CFLAGS = -I / usr / include / nptl -D_REENTRANT LDFLAGS = -L / usr / lib / nptl -lpthread thread1.c

Ответы [ 4 ]

3 голосов
/ 05 июля 2011

Здесь вы найдете ответ на свой вопрос

gcc: нужен ли -D_REENTRANT с pthreads?

По сути, все, что вам нужно, это

gcc thread1.c -o thread1 -pthread

и gcc обработает все определения для вас.

2 голосов
/ 05 июля 2011

Если ваш код не имеет внешних зависимостей, кроме pthread:

gcc thread1.c -o thread1 -D_REENTRANT -lpthread

Цитата

Определение _REENTRANT заставляет компилятор использовать потокобезопасные (т.е. повторно входящие) версии нескольких функций в библиотеке C.

1 голос
/ 05 июля 2011

Эти два make-файла будут генерировать два разных набора аргументов командной строки. Вы можете проверить это самостоятельно, просто набрав make:

$ make -f makefile1
cc -I/usr/include/nptl -D_REENTRANT  -L/usr/lib/nptl -lpthread  thread1.c   -o thread1
$ make -f makefile2
cc -D_REENTRANT  -lpthread  thread1.c   -o thread1

Выбери свой любимый.

1 голос
/ 05 июля 2011

Почти:

gcc -o thread1 -I/usr/include/nptl -D_REENTRANT -L/usr/lib/nptl thread1.c -lpthread

Переменные *FLAGS содержат аргументы, которые передаются в вызов компилятора и компоновщика соответственно. (В вашем случае вы компилируете и связываете за один раз.) Обязательно добавьте библиотеки после ваших собственных объектных файлов.

...