我目前正在写一个动态链接器,我有什么东西困扰着我。为什么ld.so (我的系统的动态链接器)是一个共享对象?为什么不能只是一个静态的可执行文件(ET_EXEC)呢?
我试着在linux内核的binfmt_elf.c中寻找答案,但据我理解,它清楚地表明,您的ELF解释器可以是一个静态的可执行文件。
编辑:我认为我的想法概括为:动态链接器可以是一个简单的ELF可执行文件(ET_EXEC)吗?
/* First of all, some simple consistency checks */
if (interp_elf_ex->e_type != ET_EXEC &&am
我很难在IPv4之外思考,找出在我们的小公司网络中(完全)启用IPv6的最佳方法。
(动机:收集知识,使端口转发过时,仅限长期运行IPv6 )
现状
我想我将首先描述我们当前的网络设置(如果我在这里遗漏了一些重要的东西,请随便问;子网和名称都是虚构的):
路由器: FritzBox 7590 (内部DHCP停用) IPv4: 192.168.12.250
DHCP & DNS 1: Windows 2012 Server IPv4: 192.168.12.5
DHCP & DNS 2: Windows 2012 Server IPv4: 192.168.12.15
DHCP范围
在global.c文件中定义了一些全局变量,如下所示:
int globalvar;
我有一个头文件global.h将这个变量声明为extern
extern int globalVar;
现在我有了main.c,它与已编译的global.o (从global.c编译)链接,它具有打开(使用dlopen)的代码,共享对象sh.so是从sh.c构建的,通过global.h访问globalVar。尽管我的可执行文件定义了globalVar (静态链接),但是当我加载动态链接库sh.so时,它表示未定义的globalVar。怎么处理这个?