LINUX.ORG.RU

Makefile. Ошибка ?


0

0

Подскажите, что в этом Makefile может быть не правильно ? Ошибки
выдаются какие-то идиотские, типа
:(.text+0x7aa): undefined reference to `read'
Makefile:
************************************************************
top=../
ede_FILES=Project.ede Makefile

blabla_SOURCES=test1.c test2.c
blabla_OBJ= test1.o test2.o
CC=gcc
C_COMPILE=$(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
C_DEPENDENCIES=-Wp,-MD,.deps/$(*F).P
LD=ld
LD_LINK=$(LD) $(LDFLAGS) -L. -o $@
VERSION=1.0
DISTDIR=$(top)lala-$(VERSION)/TEST
top_builddir = ..

DEP_FILES=.deps/test1.P .deps/test2.P
all: blabla

DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)

%.o: %.c
@echo '$(C_COMPILE) -c $<'; \
$(C_COMPILE) $(C_DEPENDENCIES) -o $@ -c $<

blabla: $(blabla_OBJ)
$(LD_LINK) $^

tags:


clean:
rm -f *.o *.obj .deps/*.P .lo

.PHONY: dist

dist:
mkdir $(DISTDIR)
cp $(blabla_SOURCES) $(ede_FILES) $(DISTDIR)

anonymous

Ответ на: комментарий от Slavaz

Это в LDFLAGS ? Прописал. Ошибка:

make -f Makefile blabla
ld -lgcc -L. -o blabla test1.o test2.o
ld: cannot find -lgcc

Здесь, blabla - target.

anonymous
()

А в чем конкретно проблема? Топикстартер, ты показываешь Makefile а жалуешься на компиляцию.

я бы в качестве первого шага определился - строчка вызова компиляции выглядит правильно?

- если да, то проблема не в Makefile, а в том что/как компилим

- если нет - то проблема таки в Makefile. Но в этом случае показывай что там make запускает и говори почему ты этим недоволен.

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

Вроде понял - я использую библиотеки: -lm, -lgsl, -lcblas и т.д. Написал свой Makefile указал их и все ОК. А в этом (сгенеренном) как и где грамотно их прописать ???

anonymous
()
Ответ на: комментарий от anonymous

Попробуй так:

[code]
top=../
ede_FILES=Project.ede Makefile

blabla_SOURCES=test1.c test2.c
blabla_OBJ= test1.o test2.o
LDLIBS=-lcblas -lm -lgsl
CC=gcc
C_COMPILE=$(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
C_DEPENDENCIES=-Wp,-MD,.deps/$(*F).P
LD=$(CC)
LD_LINK=$(LD) -L. -o $@ $(LDFLAGS)
VERSION=1.0
DISTDIR=$(top)lala-$(VERSION)/TEST
top_builddir = ..

DEP_FILES=.deps/test1.P .deps/test2.P
all: blabla

DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)

%.o: %.c
@echo '$(C_COMPILE) -c $<'; \
$(C_COMPILE) $(C_DEPENDENCIES) -o $@ -c $<

blabla: $(blabla_OBJ)
$(LD_LINK) $^ $(LDLIBS)

tags:


clean:
rm -f *.o *.obj .deps/*.P .lo

.PHONY: dist

dist:
mkdir $(DISTDIR)
cp $(blabla_SOURCES) $(ede_FILES) $(DISTDIR)
[/code]

anonymous
()
Ответ на: комментарий от anonymous

И еще странность - не запускается скомпиленный бинарь:

bash: ./blabla: Нет такого файла или каталога
Хотя нахожусь в нужном каталоге...

anonymous
()
Ответ на: комментарий от anonymous

Хм, ты пробуешь не с тем мейкфайлом.

top=../
ede_FILES=Project.ede Makefile

blabla_SOURCES=test1.c test2.c
blabla_OBJ= test1.o test2.o
LDLIBS=-lcblas -lm -lgsl 
CC=gcc
C_COMPILE=$(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
C_DEPENDENCIES=-Wp,-MD,.deps/$(*F).P
LD=$(CC)
LD_LINK=$(LD) -L. -o $@ $(LDFLAGS)
VERSION=1.0
DISTDIR=$(top)lala-$(VERSION)/TEST
top_builddir = ..

DEP_FILES=.deps/test1.P .deps/test2.P
all: blabla

DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
-include $(DEP_FILES)

%.o: %.c
	@echo '$(C_COMPILE) -c $<'; \
	$(C_COMPILE) $(C_DEPENDENCIES) -o $@ -c $<

blabla: $(blabla_OBJ)
	$(LD_LINK) $^ $(LDLIBS)

tags:

anonymous
()
Ответ на: комментарий от anonymous

Попробуй ещё удалить deps: rm -rfv .deps

anonymous
()
Ответ на: комментарий от anonymous

Очень странно - бинарь есть, а запускаться не хочет:
ash: ./blabla: Нет такого файла или каталога

И этот бинарь размером меньше, чем, если руками скомпилить .......

anonymous
()
Ответ на: комментарий от anonymous

И еще странность:

ld: warning: cannot find entry symbol _start; defaulting to 0000000000401710

anonymous
()
Ответ на: комментарий от anonymous

> ./blabla: Нет такого файла или каталога

Блин ну типичная же ошибка. Для этого ldd существует. ldd ./blabla -> смотриш какой либы не хватает. Отсутствующая функция read - это что-то жёсткое типа libc

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

$ ldd ./blabla
/usr/bin/ldd: line 116: ./blabla: Нет такого файла или каталога

line 116 - каммент

А на read уже вроде не ругается, когда -l... ... подсунул.

anonymous
()
Ответ на: комментарий от anonymous

Запусти линковку через gcc с параметром -v и посмотри какие сложные команды он выполняет. Для удачной линковки тебе нужны такие же.

anonymous
()
Ответ на: комментарий от anonymous

использование ld на современных системах далеко не так тривиально. Смотреть надо на gcc -v как уже сказали.

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.