Linux RISCV的交叉编译
我有一个C程序,我想编译它。我已经按照他们的指示安装了工具。他们的工具工作正常,我可以编译一个“HelloWorld!”C程序并运行它。但是现在我想编译另一个包含多个文件的C程序。我试图更改makefile,而不是使用gcc,我用他们的编译器名Linux RISCV的交叉编译,linux,gcc,makefile,cross-compiling,riscv,Linux,Gcc,Makefile,Cross Compiling,Riscv,我有一个C程序,我想编译它。我已经按照他们的指示安装了工具。他们的工具工作正常,我可以编译一个“HelloWorld!”C程序并运行它。但是现在我想编译另一个包含多个文件的C程序。我试图更改makefile,而不是使用gcc,我用他们的编译器名riscv64 unknown linux gnu gcc替换它,但我得到了: 通用ELF中的重新定位(EM:62) 错误,然后我试图设置CC=riscv64 unknown linux gnu gcc,但在pthread 无法识别的命令行选项'-pthr
riscv64 unknown linux gnu gcc
替换它,但我得到了:
通用ELF中的重新定位(EM:62)
错误,然后我试图设置CC=riscv64 unknown linux gnu gcc
,但在pthread
无法识别的命令行选项'-pthread'
我的问题是,我应该更改make文件以使用它们的编译器吗
提前感谢您的帮助。可能是
-D_REENTRANT
用于编译,而-lpthread
用于链接。我忘了说,我的C程序也在使用Zlib。当我把CC变量添加到我的makefile时,我得到了关于zlib库的错误,我想我应该首先为RISCV编译zlib?makefile非常复杂吗?如果没有,你能发布相关的代码片段吗?这有点复杂,但我已经在下面发布了。如果你用$(CC)替换Makefile中对gcc的调用,并在调用make时使用CC=riscv64 unknown linux gnu gcc,会发生什么情况?虽然这可能是问题的答案,但没有解释的代码转储几乎总是一个糟糕的答案。
DEBUG := 0
PROFILE := 0
MRSFAST_VERSION := "3.3.1"
BUILD_DATE := "$(shell date)"
all: OPTIMIZE_FLAGS build
debug: DEBUG_FLAGS build
profile: PROFILE_FLAGS build
build: clean-executable SSE_FLAGS compile mrsfast snp_indexer clean
LDFLAGS=#-static
LIBS=-lz -lm -pthread -lpthread
CFLAGS=-fno-pic -DMRSFAST_VERSION=\"$(MRSFAST_VERSION)\" -DBUILD_DATE=\"$(BUILD_DATE)\"
objects=baseFAST.o Sort.o MrsFAST.o Common.o CommandLineParser.o RefGenome.o HashTable.o Reads.o Output.o SNPReader.o HELP.o
compile: $(objects)
mrsfast:
ifeq ($(shell uname -s),Linux)
gcc -w $(objects) -o $@ ${LDFLAGS} ${LIBS}
else
gcc -Wl,-no_pie -fno-pic -w $(objects) -o $@ ${LDFLAGS} ${LIBS}
endif
snp_indexer: SNPIndexer.o
gcc $^ -o $@ ${LDFLAGS} ${LIBS}
clean:
@rm -f $(objects)
@rm -f SNPIndexer.o
@rm -f HELPstub.c
@rm -f HELPstub.o
clean-executable:
@rm -f mrsfast
HELP.o:
@groff -Tascii -man ./HELP.man > HELP
ifeq ($(shell uname -s),Linux)
@ld -r -b binary -o HELP.o HELP
else
@touch HELPstub.c
gcc -o HELPstub.o -c HELPstub.c
ld -r -o HELP.o -sectcreate binary HELP HELP HELPstub.o
endif
DEBUG_FLAGS:
$(eval CFLAGS = $(CFLAGS) -ggdb)
$(eval LIBS = $(LIBS) -ggdb)
OPTIMIZE_FLAGS:
$(eval CFLAGS = $(CFLAGS) -O2)
PROFILE_FLAGS:
$(eval CFLAGS = $(CFLAGS) -pg -g)
$(eval LIBS = $(LIBS) -pg -g)
SSE_FLAGS:
ifeq ($(shell uname -s),Linux)
ifeq ($(with-sse4),no)
$(shell echo "-DSSE4=0")
else
$(eval CFLAGS = $(CFLAGS) \
$(shell gv=`gcc -dumpversion`; \
sc=`grep -c "sse4" /proc/cpuinfo`; \
echo $$sc.$$gv | awk -F. '{if($$1>0 && $$2>=4 && $$3>=4) print "-DSSE4=1 -msse4.2"; else print "-DSSE4=0"}'))
endif
else
ifeq ($(with-sse4),no)
$(shell echo "-DSSE4=0")
else
$(eval CFLAGS = $(CFLAGS) \
$(shell gv=`gcc -dumpversion`; \
sc=`sysctl -n machdep.cpu.features | grep -c "SSE4"` ;\
echo $$sc.$$gv | awk -F. '{if($$1>0 && $$2>=4 && $$3>=4) print "-DSSE4=1 -msse4.2"; else print "-DSSE4=0"}'))
endif
endif