我正试图从VPS中的makefile编译此源代码,但它不起作用.VPS是一款64美分的操作系统

下面是全部错误

# 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

这是我的makefile:

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

有人知道怎么了吗?

推荐答案

按照编译器的要求go 做,即用-fPIC重新编译.要了解这个标志的作用以及在这种情况下需要它的原因,请参阅GCC手册的100.

简而言之,术语position independent code(PIC)指的是生成的机器代码,它与内存地址无关,也就是说,不会对其加载到RAM中的位置做出任何假设.共享对象(SO)中应该只包含与位置无关的代码,因为它们应该能够动态更改它们在RAM中的位置.

最后,你也可以在100上读到它.

Linux相关问答推荐

为什么硬编码的阿拉伯字母与Unicode代码点不具有相同的值

shell中两个日期的天数差异

使用 PowerShell 删除重复行所需的时间比 WSL 长得多

在 Rust 中重命名主线程

使用 AWK 过滤 Linux 输出

更改 awk 中的上一个重复行

我想使用排序命令对第 5 列进行日期排序.但问题是格式不一致,有什么方法可以做到吗?

根据文件名对目录中的文件进行 chgrp

判断指定名称的画面是否存在

Linux time 命令输出中 real、user 和 sys 的含义

Linux命令行如何接受没有pin的蓝牙设备配对

如何有效地使用 grep?

如何在python中找到文件或目录的所有者

在 mac 上通过 ssh 连接到 amazon aws linux 服务器

crt1.o:在函数_start中:-Linux 中未定义对main的引用

如何使用 Linux 命令找到我的 shell 版本?

在 Linux 上更新 PyCharm

conda 命令会提示错误:Bad Interpreter: No such file or directory

Linux 上的 NuGet:获取响应流时出错

如何制作和应用SVN补丁?