¿Cómo crear una biblioteca que use mutexes solo si pthread está vinculado?

Estoy creando una biblioteca de C en Linux que tiene varias funciones, que en conjunto operan sobre algunos datos globales. Para que estas funciones sean seguras para subprocesos, deben emplear mutexes en los puntos apropiados en el código.

En Linux, para poder usar pthreads en una aplicación, uno necesita enlazar en la biblioteca apropiada,-lpthread. En el caso de mi biblioteca, una vez compilada, me gustaría que funcione tanto si el usuario de la misma decidió usar pthreads en su aplicación, como si no lo hacen.

En el caso de que un desarrollador no use subprocesos en su aplicación, no se vincularán con pthreads. Por lo tanto, me gustaría que mi biblioteca compilada no lo requiera, y además, el uso de mutexes en una sola aplicación de subprocesos utiliza gastos generales innecesarios (sin mencionar que es una tontería).

¿Hay algún tipo de forma de escribir código (con las extensiones GCC si es necesario) que un cierto bloque de código solo se ejecutará si ciertos símbolos están vinculados? Soy consciente de que puedo usardlopen () y amigos, pero eso en sí mismo requeriría algo de lo que estoy tratando de evitar. Me imagino que lo que estoy buscando debe existir, ya que varias funciones estándar están en el mismo barco, y requerirían mutexes para ser seguros para los hilos (y lo son), pero funcionan incluso cuando no están vinculados con pthreads.

En este punto, me doy cuenta de queLa función popen () de FreeBSD en la línea 66 y 67 emplea un cheque no portátil -isthreaded, para determinar si los subprocesos se utilizan o no, y si usar mutexes. Dudo que algo así esté estandarizado de alguna manera. Pero más al punto, tal código no puede compilarse y vincularse si no se reconocen los símbolos, que en Linux, los símbolos de exclusión mutua ni siquiera estarán presentes si pthread no está vinculado.

Para resumir: en Linux, ¿cómo se crea una biblioteca, que sabe cuándo se usan también los subprocesos, y si es así, se emplean mutexes cuando sea apropiado, y no requiere vinculación con pthreads, a menos que el desarrollador de la aplicación específicamente quiera usar el subproceso en algún lugar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta