2011-10-07 69 views
7

我正試圖在64位mac上編譯svdlibc。運行make文件返回錯誤消息:是否可以在mac(64位)上編譯svdlibc?

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 [email protected] ${HOSTTYPE}/[email protected] 
    ln -s ${HOSTTYPE}/[email protected] [email protected] 
main.o: Makefile main.c svdlib.h 
    ${CC} ${CFLAGS} -c main.c 

libsvd.a: ${HOSTTYPE} ${OBJ} 
    rm -f [email protected] ${HOSTTYPE}/[email protected] 
    ar cr [email protected] ${OBJ} 
    ranlib [email protected] 
mv -f [email protected] ${HOSTTYPE}/[email protected] 
    ln -s ${HOSTTYPE}/[email protected] [email protected] 
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 

編譯工作。尚未測試結果,但看起來很有希望。

回答

6

-O4由於某種原因導致此問題。改爲使用-O3

+0

我不敢相信。這似乎已經成功了。 –

0

您可以用端口(http://www.macports.org/)嘗試它似乎它那availablee:

svdlibc @ 1.34(數學,科學) SVDLIBC是一個C庫來執行奇異值分解

基本上你會安裝的MacPorts然後,sudo port install svdlibc。

相關問題