gpt4 book ai didi

c - dlerror : Undefined symbol "_nss_cache_cycle_prevention_function" on FreeBSD 7. 2

转载 作者:太空宇宙 更新时间:2023-11-04 02:19:05 27 4
gpt4 key购买 nike

我有一个 ANSI C 程序,它使用传递 RTLD_LAZY 的 dlopen() 动态加载 .so 文件。我收到了

Undefined symbol "_nss_cache_cycle_prevention_function"

每当在 FreeBSD 7.2 中访问 .so 文件时都会发出警告。 nss_cache_cycle_prevention_function() 不是我程序的函数之一,我想一定来自 FreeBSD。这也可能是 Linux 上的一个问题,尽管我在那里没有遇到这个问题。我不想将 FreeBSD 特定的头文件加载到我的程序中。我想以可移植的方式包含此功能或禁止显示这些警告。

最佳答案

“我收到警告”是什么意思?你的程序是否检查 dlerror() 返回的值如果它不为 NULL,则打印它?

_nss_cache_cycle_prevention_functionnsdispatch(3) 使用的标记符号在 FreeBSD 上确定是否使用 nscd(8) 的服务,名称服务缓存守护进程。这是完全正常的,它不存在于一个可执行文件或共享库。

但是当nsdispatch(3)执行 dlsym(3) , 并且找不到该符号,将设置错误。和 dlerror(3)返回对最后 错误的描述,而不是对最后一个调用 的错误的描述。我怀疑这就是你要打的。

解决方案(非常便携)是:

  • dlopen(3) , 在使用 dlerror() 之前检查它的返回值查看是否有错误;
  • dlsym(3) , 自 NULL是一个有效的返回值,调用dlerror()在对 dlsym(3) 的调用之前 的空上下文中;这将清除任何先前的错误,因此无论第二次调用 dlerror(3)以后的返回是可以信任的。

一般来说,调用一个空的dlerror() 不会有什么坏处。在任何其他 dl* 调用之前。

关于c - dlerror : Undefined symbol "_nss_cache_cycle_prevention_function" on FreeBSD 7. 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3559147/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com