gpt4 book ai didi

C : variable global error at compilation : can not be used when making a shared project

转载 作者:行者123 更新时间:2023-11-30 17:39:37 25 4
gpt4 key购买 nike

我正在尝试制作一种 my_malloc.C 但当我尝试编译时,发生了这种情况:

"/usr/bin/ld: block_addr.o: 在创建共享对象时不能使用针对符号 `baseb' 的重定位 R_X86_64_PC32;使用 -fPIC 重新编译

/usr/bin/ld:最终链接失败:错误值”

嗯,我在谷歌上搜索了很多,我读了这个主题:

"How do I share a variable between source files in c"

但这并没有解决我的问题。

所以,我与您分享一些代码。

首先:Makefile:

 CC      =       gcc -fPIC

RM = rm -f

NAME = libmy_malloc_$(HOSTTYPE).so

SRCS = block_addr.c \
block_ope.c \
malloc.c \
my_free.c

OBJS = $(SRCS:.c=.o)

all: $(NAME)

$(NAME): $(OBJS)
$(CC) -fPIC -shared -o $(NAME) $(OBJS)

clean:
$(RM) $(OBJS)

fclean: clean
$(RM) $(NAME)

re: fclean all

.PHONY: all clean fclean re

在我的 .h 中有它:

extern void             *baseb;

在我的 malloc.c 上:

void            *baseb;

void *malloc(size_t size)
{
t_memblock b;
t_memblock last;
size_t s;

baseb = NULL;
..
}

我在程序的其他功能中使用“baseb”。我试图声明“extern void *baseb;”在每个文件的开头,但编译错误仍然相同。

你能帮我吗?

最佳答案

/usr/bin/ld: block_addr.o: relocation R_X86_64_PC32 against symbol `baseb' can not be used when making a shared object; recompile with -fPIC

此错误表明您在编译所有对象以进入共享库时没有使用-fPIC

您所显示的 Makefile 部分是链接,而不是编译,-fPIC 在那里不起作用。

PS.示例:

var.c

int var = 10;

编译/链接:

gcc -fPIC -shared -o libvar.so var.c

main.c

extern int var;
int main() { return var; }

编译/链接

gcc main.c -L. -lvar -o main

关于C : variable global error at compilation : can not be used when making a shared project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com