【问题标题】:CPU you selected doesn't support x86-64 instruction set您选择的 CPU 不支持 x86-64 指令集
【发布时间】:2020-09-12 11:33:35
【问题描述】:

我想编译一个程序,它有很多 32 位静态库,由于缺少 makefile,我无法重新编译为 64 位,但是我应该编译一些库以获得一些静态库以与它们一起使用。

我要编译的库之一有一个 Makefile 如下:

CC = c++

BIN_DIR = ../lib

BIN = $(BIN_DIR)/libsql.a

CFLAGS = -w -O3 -ggdb3 -g3 -std=c++14 -pipe -mtune=i386 -fstack-protector -static

CPP=AsyncSQL.cpp Semaphore.cpp Statement.cpp Tellwait.cpp

all: $(BIN)

clean:
    @echo Delete .obj files
    @rm -f *.o

%.o: %.cpp
    @echo -e "\033[0;32m [OK] \033[0m" $<
    @$(CXX) $(CFLAGS) -c $^ -o $@

$(BIN): $(CPP:%.cpp=%.o)
    @ar cru $(BIN) $^
    @ranlib $(BIN)
    @rm -rf *.o

这会导致以下输出:

 cc1plus: error: CPU you selected does not support x86-64 instruction set

如果我省略选项-mtune=i386,它将成功编译,但我应该将其余的库编译为 64 位二进制文​​件,最后我将无法链接那些静态的 32 位文件。

如何消除该错误?

任何建议将不胜感激。

【问题讨论】:

  • 我认为你想要的选项是-m32,而不是-mtune=i386
  • @NateEldredge 是的。这样可行。那是makefile作者的错。谢谢。您可以发布它。

标签: c++ linux gcc compiler-errors


【解决方案1】:

要在 64 位系统上编译 32 位代码,请使用选项 -m32 到 gcc。 -mtune=i386 不正确。

【讨论】:

    猜你喜欢
    • 2012-10-08
    • 2012-02-26
    • 1970-01-01
    • 2012-05-02
    • 2012-03-06
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多