我正在尝试从 VPS 中的 makefile 编译此源代码,但它不起作用。 VPS 是 64 Cent 操作系统
这是完整的错误
# make
gcc -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/amx/*.c
g++ -c -O3 -w -DLINUX -I../SDK/amx/ ../SDK/*.cpp
g++ -c -O3 -w -DLINUX -I../SDK/amx/ *.cpp
g++ -O2 -fshort-wchar -shared -o "TCP_V1.so" *.o
/usr/bin/ld: TCP-LINUX_V1.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
TCP-LINUX_V1.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [all] Error 1
这是我的生成文件:
GPP=g++
GCC=gcc
OUTFILE="TCP_V1.so"
COMPILE_FLAGS=-c -O3 -w -DLINUX -I../SDK/amx/
all:
$(GCC) $(COMPILE_FLAGS) ../SDK/amx/*.c
$(GPP) $(COMPILE_FLAGS) ../SDK/*.cpp
$(GPP) $(COMPILE_FLAGS) *.cpp
$(GPP) -O2 -fshort-wchar -shared -o $(OUTFILE) *.o
有谁知道出了什么问题吗?
执行编译器告诉您执行的操作,即重新编译-fPIC
。要了解此标志的作用以及在这种情况下为什么需要它,请参阅代码生成选项海湾合作委员会手册。
简而言之,该术语位置无关代码(PIC) 是指生成的机器代码与内存地址无关,即不对其加载到 RAM 的位置做出任何假设。只有与位置无关的代码才应该包含在共享对象 (SO) 中,因为它们应该能够动态更改其在 RAM 中的位置。
最后,您可以在维基百科 too.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)