C 使用dlopen动态加载共享库中的公共符号时出现问题
我正在研究传统的构建基础设施,它禁止在构建可动态加载的共享库(使用-fPIC构建)时使用公共符号。C 使用dlopen动态加载共享库中的公共符号时出现问题,c,linker,shared-libraries,C,Linker,Shared Libraries,我正在研究传统的构建基础设施,它禁止在构建可动态加载的共享库(使用-fPIC构建)时使用公共符号。 (构建基础结构禁止使用'nm libtest.so | grep“C'。另一个模块使用dlopen(libtest.so)加载此共享库。) 我需要帮助理解为什么在libtest.so中使用公共符号是个坏主意 我看到库中所有未初始化的全局变量都是公共符号,但在加载库时它们应该初始化为NULL。或者我还遗漏了什么。什么是“公共符号”?库中所有未初始化的全局符号都是公共符号。根据nm:“C”符号是公共的
(构建基础结构禁止使用'nm libtest.so | grep“C'。另一个模块使用dlopen(libtest.so)加载此共享库。) 我需要帮助理解为什么在libtest.so中使用公共符号是个坏主意
我看到库中所有未初始化的全局变量都是公共符号,但在加载库时它们应该初始化为NULL。或者我还遗漏了什么。什么是“公共符号”?库中所有未初始化的全局符号都是公共符号。根据nm:“C”符号是公共的。公共符号是未初始化的数据。链接时,可能会出现多个具有相同名称的公共符号。如果在任何地方定义了符号,则公共符号将被视为未定义的引用。听起来问题似乎出在构建系统上。具体来说,为什么会有这张支票?