Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用dlopen动态加载共享库中的公共符号时出现问题_C_Linker_Shared Libraries - Fatal编程技术网

C 使用dlopen动态加载共享库中的公共符号时出现问题

C 使用dlopen动态加载共享库中的公共符号时出现问题,c,linker,shared-libraries,C,Linker,Shared Libraries,我正在研究传统的构建基础设施,它禁止在构建可动态加载的共享库(使用-fPIC构建)时使用公共符号。 (构建基础结构禁止使用'nm libtest.so | grep“C'。另一个模块使用dlopen(libtest.so)加载此共享库。) 我需要帮助理解为什么在libtest.so中使用公共符号是个坏主意 我看到库中所有未初始化的全局变量都是公共符号,但在加载库时它们应该初始化为NULL。或者我还遗漏了什么。什么是“公共符号”?库中所有未初始化的全局符号都是公共符号。根据nm:“C”符号是公共的

我正在研究传统的构建基础设施,它禁止在构建可动态加载的共享库(使用-fPIC构建)时使用公共符号。
(构建基础结构禁止使用'nm libtest.so | grep“C'。另一个模块使用dlopen(libtest.so)加载此共享库。) 我需要帮助理解为什么在libtest.so中使用公共符号是个坏主意


我看到库中所有未初始化的全局变量都是公共符号,但在加载库时它们应该初始化为NULL。或者我还遗漏了什么。

什么是“公共符号”?库中所有未初始化的全局符号都是公共符号。根据nm:“C”符号是公共的。公共符号是未初始化的数据。链接时,可能会出现多个具有相同名称的公共符号。如果在任何地方定义了符号,则公共符号将被视为未定义的引用。听起来问题似乎出在构建系统上。具体来说,为什么会有这张支票?