我创建了一个日志库liblog.so
。我想分享一个名为File *rt_file
的变量,它在lib_rt.h
中定义,此标头也由log_rt.c,log_linux.c ==> liblog.so
,logd.c ==> logd
和log_rt_client.c ==> log_rt_client
继承。在这里,我创建了一个守护程序logd
,它放置(实际应该)file pointer
rt_file
。
这就是我想要做的。
这里liblog.so
是一个动态库,logd
在启动时启动,它应该将文件指针设置为rt_file
,而log_rt_client
应该获取文件指针并打印一些日志。
问题来分享公共变量rt_file
。
我尝试了
stackoverflow [1]:第一个解决方案是使用extern
并完成任务。对于我的情况,我虽然[2]这个。而不是创建一个全局变量将变量放入作用域文件,并使用get
和set
函数来访问值。
但这两个选项对我没有用,让我解释一下。
liblog.so
logd
和log_rt_client
,因此,当log_rt_client
宣布rt_file
时,它显示错误但是未定义,因为它在logd
中定义。这不是(不能)用log_rt_client
编译的。虽然所有文件都链接到liblog.so
logd
调用liblog.so
设置并获取文件指针,但当我运行时log_rt_client
rt_file
没有预期指针(文件指针)。两者的rt_file
均值分配是不同的。 任何人都可以建议我一个解决方案。希望这能解释一切。
答案 0 :(得分:0)
您必须使用共享内存
动态库被映射到进程地址空间,因此每个进程都会看到它们的副本 rt_file映射到他们的数据段(我的意思是任何全局变量。在你的情况下,它是rt_file)。