【问题标题】:Test Availability of x_np pthread Functions - C/C++测试 x_np pthread 函数的可用性 - C/C++
【发布时间】:2016-03-19 01:21:03
【问题描述】:

我正在编写一个基于 pthread API 的 C 线程辅助库。有很多 pthread 函数是非标准的 GNU 扩展,例如pthread_set_affinity_nppthread_clear_exit_nppthread_set_qos_class_self_np 等。

有没有什么方法可以使用宏来测试这些不可移植的功能是否可用,而无需查找哪些操作系统定义了什么?

【问题讨论】:

  • dlopen() pthread-library,然后是 dlsym() 函数名?
  • @EOF 我从来没有听说过这些功能。我会查一下。
  • @EOF 似乎这些函数是在运行时调用的,不是吗?理想情况下,我想要一个预处理器解决方案。
  • “预处理器解决方案”称为宏。类似#ifdef pthread_set_affinity_np
  • @EOF 是的,在我的问题中,我问是否有办法为此使用宏。

标签: c++ c pthreads portability


【解决方案1】:

这正是人们使用 Autoconf 来解决的问题。例如,在您的 configure.ac 文件中存在这样的 sinppet:

AC_CHECK_DECLS(
  [pthread_attr_setaffinity_np, pthread_clear_exit_np, pthread_set_qos_class_self_np],
  [], [], [[#include <pthread.h>]])

将定义宏HAVE_DECL_PTHREAD_ATTR_SETAFFINITY_NPHAVE_DECL_PTHREAD_CLEAR_EXIT_NPHAVE_DECL_PTHREAD_SET_QOS_CLASS_SELF_NP,如果声明不存在则定义为0,如果存在则定义为1

【讨论】:

  • 我从没想过 autoconf。我以前从未使用过它。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 2012-10-29
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多