Проблема при связывании с `-lrt` в Mac OSX

На моем Mac OSX 10.13 я всегда использую следующий make-файл для компиляции кодов C:

TARGET = run
LIBS = -O2 -lm -lrt
CC = gcc

.PHONY: default all clean

all: $(TARGET)

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)

%.o: %.c $(HEADERS)
    $(CC) $(CFLAGS) -c $< -o $@

.PRECIOUS: $(TARGET) $(OBJECTS)

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) $(CFLAGS) $(LIBS) -o $@

clean:
    -rm -f *.o
    -rm -f $(TARGET)

Обратите внимание, что я использую -lrt специально, потому что я использую #include <aio.h> для некоторых своих кодов. Из-за этого я продолжаю получать эту ошибку:

ld: library not found for -lrt
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [run] Error 1

Эта ошибка не появляется при работе в системах Linux. Как мне исправить это, чтобы он работал на Mac OSX?


person Kristy    schedule 14.03.2018    source источник
comment
Просто для проверки, удачно ли связывается программа, если вы упадете -lrt из LIBS? (Между прочим, -O2 принадлежит CFLAGS, а не LIBS; там, где он у вас есть, это не принесет вам никакой пользы.)   -  person zwol    schedule 14.03.2018
comment
@zwol Нет, это не так! Удаление -O2 не связывает его. И спасибо, что сообщили мне, что -O2 принадлежит CFLAGS   -  person Kristy    schedule 14.03.2018
comment
Файл librt.so в стандартных путях библиотек похож на /usr/lib? Возможно, вам также следует передать параметр -L с путем, где найти librt.so.   -  person Pablo    schedule 14.03.2018
comment
@Pablo Я не могу найти librt.so в /usr/lib или даже /usr/include !!   -  person Kristy    schedule 14.03.2018
comment
librt.so должен быть включен в ваш набор инструментов при установке компилятора. Я не использую Mac, поэтому не знаю, какой пакет вам следует установить. См. stackoverflow.com/a/1506031/1480131   -  person Pablo    schedule 14.03.2018
comment
На основе быстрого поиск в Google Я нашел много отчетов об ошибках github с той же проблемой. Видимо для Дарвина вам вообще не нужен -lrt.   -  person Pablo    schedule 14.03.2018
comment
@Pablo Большое спасибо за ваши усилия. Я действительно ценю это. Даже если удалить -lrt, у меня все еще есть эта проблема. Надеюсь, у кого-то есть решение   -  person Kristy    schedule 14.03.2018
comment
Вам также не нужно -lm на Mac, даже если вы это делаете в Linux. Mac помещают больше кода в центральную библиотеку и полагаются на меньшее количество вспомогательных библиотек. Если вы действительно беспокоитесь, вы можете создать librt.a в текущем каталоге, и он будет связан. В нем не нужно ничего содержать (но для этого нужен объектный файл). Я создал исходный файл unlinked.c, содержащий extern void I_wont_link_this_function_if_I_can_help_it(void); void I_wont_link_this_function_if_I_can_help_it(void) { }; скомпилировал его; и побежал ar rv librt.a unlinked.o. Тогда я смогу связать программы с -L. -lrt.   -  person Jonathan Leffler    schedule 14.03.2018
comment
Вы должны получать другое сообщение об ошибке или сообщения с удалением -lrt из LIBS. Пожалуйста, покажите нам эти сообщения об ошибках. (У меня плохое предчувствие, что окончательным ответом будет то, что OSX не реализует интерфейсы, которые вы пытаетесь использовать ...)   -  person zwol    schedule 14.03.2018