询问 -fPIE 选项的 gcc 编译错误

询问 -fPIE 选项的 gcc 编译错误

我从以下链接通过单击代码然后下载 ZIP 下载了一个 zip 文件。 https://github.com/b/LatticeCrypto 然后我将其解压并在文件夹~/Desktop/LatticeCrypto-master中打开终端。阅读README.txt后,我在终端上运行了以下命令。

make CC=gcc ARCH=x64 ASM=TRUE AVX2=TRUE

它给出了以下信息。

gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  tests/tests.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  tests/test_extras.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  kex.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  random.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  ntt_constants.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/ntt_x64_asm.S
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/error_asm.S
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/ntt_x64.c
gcc -c -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/consts.c
gcc -o test tests.o test_extras.o kex.o random.o ntt_constants.o ntt_x64_asm.o error_asm.o ntt_x64.o consts.o 
/usr/bin/ld: ntt_x64_asm.o: relocation R_X86_64_32S against symbol `MASK12x8' can not be used when making a PIE object; recompile with -fPIE
/usr/bin/ld: error_asm.o: relocation R_X86_64_32S against symbol `ONE32x' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
make: *** [makefile:57: test] Error 1

为了解决该错误,我在第 42 行添加了 -fPIE 选项,然后在解压文件中的 makefile 的第 57 行添加了 $(CFLAGS)。然后我运行命令“make CC=gcc ARCH=x64 ASM=TRUE AVX2=TRUE”。它打印以下消息。

gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  tests/tests.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  tests/test_extras.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  kex.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  random.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  ntt_constants.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/ntt_x64_asm.S
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/error_asm.S
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/ntt_x64.c
gcc -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_  AMD64/consts.c
gcc -o test tests.o test_extras.o kex.o random.o ntt_constants.o ntt_x64_asm.o error_asm.o ntt_x64.o consts.o  -c -fPIE -O3       -mavx2 -D _AMD64_ -D __LINUX__ -D _AVX2_ -D _ASM_ 
gcc: warning: tests.o: linker input file unused because linking not done
gcc: warning: test_extras.o: linker input file unused because linking not done
gcc: warning: kex.o: linker input file unused because linking not done
gcc: warning: random.o: linker input file unused because linking not done
gcc: warning: ntt_constants.o: linker input file unused because linking not done
gcc: warning: ntt_x64_asm.o: linker input file unused because linking not done
gcc: warning: error_asm.o: linker input file unused because linking not done
gcc: warning: ntt_x64.o: linker input file unused because linking not done
gcc: warning: consts.o: linker input file unused because linking not done

成功编译后,它应该生成我们需要运行的名为 test 的目标文件。但它并没有创建该文件。请在这方面提供帮助。

相关内容