我正在尝试从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
有人知道怎么了吗?
执行编译器告诉您的操作,即使用进行重新编译-fPIC
。要了解此标志的作用以及在这种情况下为什么需要此标志,请参阅GCC手册的
代码生成选项 。
简而言之,术语“ 位置无关代码”
(PIC)指的是与内存地址无关的生成的机器代码,即,不对将其加载到RAM中的位置进行任何假设。共享对象(SO)应该仅包含位置无关代码,因为它们应具有动态更改其在RAM中位置的能力。
最后,您也可以在 Wikipedia 上阅读有关它的信息。
我正在制作一个需要libgmp的共享库。我的目标是将静态libgmp嵌入到共享库中。 我尝试过。/configure with cflags=“-fpic”。此外,我还尝试修改了libgmp源代码的subdir中的所有Makefile,以便用-fpic编译所有代码。(脏活累活) 但是,当我将libgmp.a链接到共享库时,仍然收到错误消息。 /usr/bin/ld://usr/local/lib/
我试图安装一个库,但运行make后出现以下错误。如何用标志重新编译? 使目标pwrutils的扫描依赖项链接CXX共享库libpwrutils.so/usr/bin/ld://usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../../x86_64-linux-gnu/libboost_system.a(error_code.o):在创建共享对象时不能使用针对`
问题内容: 我想知道是否有可能(如果可以:如何)使用Go交叉编译共享库。说我有这段代码: 在中。在Mac上,我可以运行 获得名为的共享库。与Linux类似,只是扩展名为。 现在,我想使用Linux作为构建库的主要平台(适用于Mac和Windows)。我有什么选择? 设置来运行上面的linux上,我得到 有任何想法吗? 问题答案: 您面临的问题实际上与编译共享库或可执行文件无关,而与使用cgo并尝试
我有一个应用程序,它有32位本机库。当我用64位库重新安装相同的应用程序时,它无法创建data/data/application-package-name中的lib softlink。 这个lib softlink映射到data/app/app-package-name-hash/arm(32位)或data/app/app-package-name-hash/arm64(64位) 有什么问题? 你
我已经编写了一个库,过去我使用自编的Makefile编译它,但现在我想切换到cmake。树是这样的(我删除了所有不相关的文件): 我只是想把它编译到一个共享的文件库中。 我发现的大多数示例都使用一些共享库编译可执行文件,但绝不仅仅是一个普通的共享库。如果有人能告诉我一个使用cmake的非常简单的库,那也会很有帮助,所以我可以用这个作为例子。
问题内容: 我尝试了以下代码。 抛出异常 怎么解决? 问题答案: 由于这是一个很长的附加值 Java语言规范 如果以ASCII字母L或l(ell)为后缀,则整数文字的类型为long。否则为int类型(第4.2.1节)。