2016-03-19 6 views
0

Ich schreibe eine Hilfsbibliothek für Threading in C, basierend auf der Pthread-API. Es gibt viele Pthread Funktionen, die nicht dem Standard entsprechende GNU-Erweiterungen, wie pthread_set_affinity_np, pthread_clear_exit_np, pthread_set_qos_class_self_np usw.Testen der Verfügbarkeit von x_np Pthread Funktionen - C/C++

Gibt es eine Möglichkeit, Makros verwenden können, um zu testen, ob diese nicht tragbaren Funktionen zur Verfügung stehen, ohne aufzublicken, welche Betriebssysteme definieren Was?

+0

'dlopen()' die 'pthread'-Bibliothek, dann' dlsym() 'für den Funktionsnamen? – EOF

+0

@EOF Ich habe noch nie von einer dieser Funktionen gehört. Ich werde nachsehen. –

+0

@EOF Es scheint, als ob diese Funktionen zur Laufzeit aufgerufen werden, nicht wahr? Idealerweise hätte ich gerne eine Präprozessor-Lösung. –

Antwort

1

Dies ist genau die Art von Problem, das Menschen mit Autoconf lösen. ZB ein sinppet wie dies in Ihrer configure.ac Datei:

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

werden Makros definieren HAVE_DECL_PTHREAD_ATTR_SETAFFINITY_NP, HAVE_DECL_PTHREAD_CLEAR_EXIT_NP und HAVE_DECL_PTHREAD_SET_QOS_CLASS_SELF_NP, definiert 0 wenn die Erklärung nicht vorhanden oder 1 ist, wenn es ist.

+0

Ich hätte nie an autoconf gedacht. Ich habe es noch nie zuvor benutzt. Danke für den Tipp. –