编译共享库时出错

时间:2016-07-26 07:47:06

标签: c gcc shared-libraries

使用gcc我试图在x86_64系统上创建一个共享库。代码是

public int remainCards[] = new int[16];

使用int myglob = 42; int ml_func(int a, int b) { myglob += a; return b + myglob; } 然后gcc -c -g code.c -o code.o进行编译并抛出错误!

错误为gcc -shared code.o -o libcode.so

所以我尝试使用 -fPIC 标志进行编译,但它会抛出同样的错误。

注意:我正在尝试在库中查看加载时重定位,因此我无法使用标记/usr/bin/ld: libconst.o: relocation R_X86_64_PC32 against symbol 'myglob' can not be used when making a shared object; recompile with -fPIC

2 个答案:

答案 0 :(得分:0)

在x86_64架构上,gcc要求您使用-fPIC(位置无关代码)。这是因为符号rand的重定位类型是R_X86_64_PC32类型。你可以做的是使用-mcmodel=large将重定位类型设置为R_X86_64_64。

gcc -g -mcmodel=large -c code.c -o code.o
gcc -shared -o libcode.so code.o

更好地解释here

答案 1 :(得分:0)

如果未在库中的代码之外使用results["HomeWin"] = results["Home Team"].astype(int) < results["OT?"].astype(int) ,则可以为变量指定import pandas as pd results = pd.DataFrame({'Home Team':['1','2','3'], 'OT?':['4','2','1']}) print (results) Home Team OT? 0 1 4 1 2 2 2 3 1 results["HomeWin"] = results["Home Team"].astype(int) < results["OT?"].astype(int) print (results) Home Team OT? HomeWin 0 1 4 True 1 2 2 False 2 3 1 False 存储类。 =IF(DATEDIF(B595;TODAY();"y")=0;"";DATEDIF(B595;TODAY();"y") & " years, ") & _ IF(DATEDIF(B595;TODAY();"ym")=0;"";DATEDIF(B595;TODAY();"ym") & " months, ") & _ IF(DATEDIF(B595;TODAY();"md")=0;"";DATEDIF(B595;TODAY();"md") & " days, ") 全局变量将位于myglob细分中。

示例:

static