【发布时间】: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