2016-03-19 3 views
0

Я пишу вспомогательную библиотеку для потоковой передачи в C на основе API pthread. Есть много функций, которые PTHREAD нестандартных расширений GNU, такие как pthread_set_affinity_np, pthread_clear_exit_np, pthread_set_qos_class_self_np и т.д.Проверка доступности x_np pthread Функции - C/C++

Есть ли способ я могу использовать макросы, чтобы проверить, доступны ли эти не портативные функции, не отрываясь, какие операционные системы определяют что?

+0

'dlopen()' 'библиотека pthread', а затем' dlsym() 'для имени функции? – EOF

+0

@EOF Я никогда не слышал ни о какой из этих функций. Я посмотрю их. –

+0

@EOF Кажется, что эти функции вызываются во время выполнения, не так ли? В идеале я хотел бы использовать препроцессорное решение. –

ответ

1

Это именно та проблема, которую люди используют Autoconf для решения. Например, sinppet, как это в вашем файле configure.ac:

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_NP, HAVE_DECL_PTHREAD_CLEAR_EXIT_NP и HAVE_DECL_PTHREAD_SET_QOS_CLASS_SELF_NP, определенные в 0, если декларация не присутствует или 1, если она есть.

+0

Я бы никогда не подумал об автоконфигурации. Я никогда не использовал его раньше. Спасибо за совет. –

Смежные вопросы