首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >on错误: FreeBSD 7.2上未定义的符号"_nss_cache_cycle_prevention_function“

on错误: FreeBSD 7.2上未定义的符号"_nss_cache_cycle_prevention_function“
EN

Stack Overflow用户
提问于 2010-08-25 01:22:45
回答 1查看 2.1K关注 0票数 1

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

代码语言:javascript
复制
Undefined symbol "_nss_cache_cycle_prevention_function"

在FreeBSD 7.2中访问.so文件时出现警告。nss_cache_cycle_prevention_function()不是我的程序中的一个函数,我想它一定来自FreeBSD。这在Linux上也可能是一个问题,尽管我在那里没有遇到这个问题。我不希望将FreeBSD特定的头文件加载到我的程序中。我想以一种可移植的方式包含这个函数,或者取消这些警告。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-31 06:18:57

你说“我收到警告”是什么意思?您的程序是否检查dlerror()返回的值,如果不为空,则将其打印出来?

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

但是,当nsdispatch(3)执行dlsym(3)时,如果找不到该符号,则会设置错误。并且dlerror(3)返回最后一个错误的描述,而不是最后一个调用的错误的描述。我怀疑这就是你要攻击的东西。

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

对于

  • dlopen(3),请在使用dlerror()之前检查其返回值,以查看是否存在错误;
  • dlsym(3),由于NULL是有效的返回值,因此在调用<代码>D16之前在无效上下文中调用dlerror();这将清除以前的任何错误,以便以后第二次调用dlerror(3)返回的任何内容都可以信任。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3559147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档