c - 是否可以在 mac(64 位)上编译 svdlibc?

标签 c macos svd

我正在尝试编译 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

这没有多大意义。

生成文件是:

# 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

编译工作。尚未测试结果,但看起来很有希望。

最佳答案

-O4 出于某种原因导致此问题。请改用 -O3

关于c - 是否可以在 mac(64 位)上编译 svdlibc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682662/

相关文章:

c - 使用 strtok 和填充数组

c - 覆盖静态库中定义的 C 函数

c - 在 c 中调试日志文件

java - 使用 [Caps-Lock] 区分两个 USB 连接的键盘

python - 为什么 Scipy 稀疏实现会返回错误数量的奇异值,而密集奇异值会返回正确的数量?

c - 函数之间的全局指针

macos - 无法在 macOS 10.13 上启动 AVD

c# - 用于 Mac OS X 上 .NET Core 开发的对象浏览器

c# - Windows 环境下 LSA\LSI 的随机 SVD

eigen - 使用特征值计算零空间是错误的?