共享库构造函数未在 dlopen() 上执行

问题描述 投票:0回答:1

鉴于

module.c

__attribute__((constructor)) int init_module() {
  printf("Module init\n");
  return 0;
}

__attribute__((destructor)) int deinit_module() {
  printf("Module deinit\n");
  return 0;
}

gcc -shared -fPIC -o module_A.so module.c
编译。

在此 so 文件上调用

dlopen()
,不会运行构造函数。

c shared-libraries
1个回答
0
投票

init_module()
函数的名称是罪魁祸首。将其更改为其他任何内容,例如
library_init()
,甚至进一步远离可能听起来像系统功能的任何内容:
my_library_init()

似乎 https://man7.org/linux/man-pages/man2/init_module.2.html 是一个现有函数,所以链接器可能不允许您在加载库时意外调用它,只是因为您共享符号名称。

© www.soinside.com 2019 - 2024. All rights reserved.