![询问 -fPIE 选项的 gcc 编译错误](https://linux22.com/image/947266/%E8%AF%A2%E9%97%AE%20-fPIE%20%E9%80%89%E9%A1%B9%E7%9A%84%20gcc%20%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF.png)
我从以下链接通过单击代码然后下载 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 的目标文件。但它并没有创建该文件。请在这方面提供帮助。