На моем 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?
-lrt
изLIBS
? (Между прочим,-O2
принадлежит CFLAGS, а не LIBS; там, где он у вас есть, это не принесет вам никакой пользы.) - person zwol   schedule 14.03.2018-O2
не связывает его. И спасибо, что сообщили мне, что-O2
принадлежит CFLAGS - person Kristy   schedule 14.03.2018librt.so
в стандартных путях библиотек похож на/usr/lib
? Возможно, вам также следует передать параметр-L
с путем, где найтиlibrt.so
. - person Pablo   schedule 14.03.2018librt.so
в/usr/lib
или даже/usr/include
!! - person Kristy   schedule 14.03.2018librt.so
должен быть включен в ваш набор инструментов при установке компилятора. Я не использую Mac, поэтому не знаю, какой пакет вам следует установить. См. stackoverflow.com/a/1506031/1480131 - person Pablo   schedule 14.03.2018-lrt
. - person Pablo   schedule 14.03.2018-lrt
, у меня все еще есть эта проблема. Надеюсь, у кого-то есть решение - person Kristy   schedule 14.03.2018-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-lrt
изLIBS
. Пожалуйста, покажите нам эти сообщения об ошибках. (У меня плохое предчувствие, что окончательным ответом будет то, что OSX не реализует интерфейсы, которые вы пытаетесь использовать ...) - person zwol   schedule 14.03.2018