我正在尝试在64位mac上编译svdlibc。运行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似乎找到了问题。将makefile中的第一行更改为:CC = gcc -Wall -O3 -march=x86-64
编译工作。尚未测试结果,但看起来很有希望。
答案 0 :(得分:6)
-O4
由于某种原因导致这种情况。请改用-O3
。
答案 1 :(得分:0)
您可以尝试使用端口(http://www.macports.org/),它似乎可用:
svdlibc @ 1.34(数学,科学) SVDLIBC是一个执行奇异值分解的C库
基本上你会安装macports,sudo port install svdlibc。