Можно ли скомпилировать svdlibc на Mac (64 бит)? - PullRequest
7 голосов
/ 07 октября 2011

Я пытаюсь скомпилировать svdlibc на 64-битном Mac. Запуск файла make возвращает сообщение об ошибке:

main.c:1: error: CPU you selected does not support x86-64 instruction set
main.c:1: error: CPU you selected does not support x86-64 instruction set
make: *** [main.o] Error 1

Что не имеет особого смысла.

Файл make:

# Linux or Windows:
CC = gcc -Wall -O4 -march=i486
# CC = icc -w1 -O3 -march=i486

# Macintosh:
ifeq ($(HOSTTYPE),powerpc)
  CC = cc -pipe -O3 -Wall -fno-common -arch ppc
endif

LIBS=-lm
OBJ=svdlib.o svdutil.o las2.o

svd: Makefile main.o libsvd.a
    ${CC} ${CFLAGS} -o svd main.o libsvd.a ${LIBS}
    mv -f $@ ${HOSTTYPE}/$@
    ln -s ${HOSTTYPE}/$@ $@
main.o: Makefile main.c svdlib.h
    ${CC} ${CFLAGS} -c main.c

libsvd.a: ${HOSTTYPE} ${OBJ}
    rm -f $@ ${HOSTTYPE}/$@
    ar cr $@ ${OBJ}
    ranlib $@
mv -f $@ ${HOSTTYPE}/$@
    ln -s ${HOSTTYPE}/$@ $@
svdlib.o: Makefile svdlib.h svdlib.c
    ${CC} ${CFLAGS} -c svdlib.c
svdutil.o: Makefile svdutil.c svdutil.h
    ${CC} ${CFLAGS} -c svdutil.c
las2.o: Makefile las2.c svdlib.h svdutil.h
    ${CC} ${CFLAGS} -c las2.c
clean: 
    rm *.o

$(HOSTTYPE):
    if test ! -d $(HOSTTYPE); \
    then mkdir $(HOSTTYPE); fi

Редактирование файла make для изменения флага -march позволяет продолжить компиляцию, но, по-видимому, связывание завершается неудачно:

ld: lto: could not merge in main.o because Invalid ALLOCA record for 
architecture x86_64

Кто-нибудь делал это? Или я должен использовать другую библиотеку SVD? (Для больших разреженных матриц?)

РЕДАКТИРОВАТЬ: porneL, кажется, нашел проблему. Изменение верхней строки в make-файле на:

CC = gcc -Wall -O3 -march=x86-64

сборник работ. Еще не проверял результаты, но выглядит очень многообещающе.

Ответы [ 2 ]

6 голосов
/ 08 декабря 2011

-O4 вызывает это по какой-то причине.Вместо этого используйте -O3.

0 голосов
/ 29 ноября 2011

Вы можете попробовать с портом (http://www.macports.org/), кажется, он доступен:

svdlibc @ 1,34 (математика, наука) SVDLIBC - это библиотека C для разложения по единственному значению

После этого вы установите macports, sudo port установите svdlibc.

...