файл не распознан: формат файла не распознан

когда я запускаю файл make, я получаю эту ошибку

“obj / viojournal.o: файл не распознан: формат файла не распознан collect2: ld возвращен 1 статус выхода”

и файл make выглядит следующим образом

как решить эту проблему. Я использую gcc-компилятор на centos 5.4 linx 64bit machine.

all: libvioft.so fdump syncer CPPFLAGS = -I/usr/include/libxml2 -I../clogger -I../marshall -I../ddp \ -I../http -I../xml -I../nfsop -I../include/common -I../restful \ -I../include/oneGrid CFLAGS = -g3 -Wall -Wextra -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED #CFLAGS = -g3 -Wall -Wextra -fPIC LDFLAGS = -Wl,-rpath=\$$ORIGIN -Wl,-rpath=\$$ORIGIN/../clogger \ -Wl,-rpath=\$$ORIGIN/../marshall -Wl,-rpath=\$$ORIGIN/../ddp \ -Wl,-rpath=\$$ORIGIN/../http -Wl,-rpath=\$$ORIGIN/../xml \ -Wl,-rpath=\$$ORIGIN/../restful LIBS = -lpthread -lssl -lxml2 -lbz2 -L../clogger -lclogger \ -L../marshall -lmarshall -L../ddp -lddp -L../nfsop -lnfsop libsources = filefs.c viojournal.c recvReplicaUpdate.c syncer.c hostops.c filetable.c updateRemoteFT.c checkpoint.c #libsources = filefs.c viojournal.c hostops.c filetable.c checkpoint.c container.c locks.c libobjects = $(libsources:%.c=obj/%.o) fttestsources = fttest2.c fttestobjects = $(fttestsources:%.c=obj/%.o) syncersources = syncer.c syncerobjects = $(syncersources:%.c=obj/%.o) #dmpsources = viodump.c hostops.c #dmpobjects = $(dmpsources:%.c=obj/%.o) libvioft.so: $(libobjects) $(CC) $(CFLAGS) -shared -o libvioft.so $(libobjects) fdump: $(fttestobjects) libvioft.so $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -o fdump $(fttestobjects) syncer: $(syncerobjects) libvioft.so $(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) -o syncer $(syncerobjects) viodump: $(dmpobjects) $(CC) $(CFLAGS) $(LDFLAGS) -lpthread -o viodump $(dmpobjects) clean: rm -rf fttest viodump atar syncer libvioft.so obj install: cp -f libvioft.so ../package/lib # cp -f syncer ../package/bin obj/%.d: %.c $(SHELL) -ec 'mkdir -p obj && $(CC) -MM $(CPPFLAGS) $(CFLAGS) -MT $(@:.d=.o) -MT $@ $ $@' obj/%.o: %.c $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< include $(libsources:%.c=obj/%.d) include $(tstsources:%.c=obj/%.d) include $(atrsources:%.c=obj/%.d) #include $(dmpsources:%.c=obj/%.d) 

Кажется, что объектный файл каким-то образом поврежден. Попробуйте удалить его, чтобы заставить его перестроить или, как предлагает @devnull, сделать make clean .

(Я бы поставил это предложение в качестве комментария, но мне не хватает, Репутация пока)

Недавно я столкнулся с этой ошибкой, и у меня есть несколько предложений, которые могут помочь.

В моем случае в makefile (-ах) были CFLAGS разные CFLAGS зависимости от того, была ли установка 64-разрядной или 32-разрядной. Вот несколько строк из README

By default, the C/C++ software are compiled in 32 bits with the options (-Os) but can be compiled in 64 bits, -m64 is added to the CFLAGS variable in

Мое предложение – сначала попробовать добавить -m64 к вашим CFLAGS . Если это не сработает, удалите -m64 и замените его на -m64 .

То есть сначала попробуйте иметь следующую строку:

 CFLAGS = -g3 -Wall -Wextra -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED -m64 

Затем, из командной строки, запустите

 make clean 

Далее следуют команды make вы используете для своей установки.

Если это не сработает, измените соответствующую строку на

 CFLAGS = -g3 -Wall -Wextra -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED -Os 

Затем make clean а другой make материал.

Если некоторые из объектов C являются 64-битными, а некоторые из них 32-разрядными (я не знаю, существует ли такая ситуация на самом деле), вам может потребоваться сделать что-то другое.

Это сработало в моем случае, подробности которого вы можете увидеть здесь .

Пожалуйста, прокомментируйте, чтобы сообщить мне, если это сработает для вас.