2012-04-30 13 views
5

Mi programa está construido como un cargador y muchos módulos que son bibliotecas compartidas. Ahora, una de esas bibliotecas usa pthreads y parece estar vinculada al módulo de forma dinámica (cargada al inicio). Ahora sería más simple si pudiera forzar pthreads a vincularse en el archivo del módulo. GCC en Linux, ¿cómo lo hago? Supongo que un libpthread.a es necesario ...Fuerza GCC al enlace estático p. pthreads (y no enlace dinámico)

+0

¿En qué instancia tiene que hacer algo más que incluir el encabezado pthread para que se genere? ¿Tienes un ejemplo de fuente? ¿Este método de compilación es obligatorio? –

Respuesta

16

Si bien teóricamente es posible enlazar libpthread.a en una biblioteca compartida, es realmente mala idea. La razón es que libpthread es parte de glibc, y todas partes de glibcdeben coincidir exactamente, o verá bloqueos extraños e inesperables.

Así que une libpthread.a en su Biblioteca compartida:

  1. causa de su programa se bloquee cuando se mueve a una máquina con una versión diferente de glibc
  2. causa de su programa existente se bloquee cuando es de su máquina actual glibc actualizado, pero su módulo no se vuelve a vincular con el libpthread.a actualizado.

Sálgase de la molestia y no haga eso.

+0

: o Dios mío, Dios mío, está bien que lo diga. Pero cuando su parte de glibc, .../me se deripula ... – imacake

+1

Gracias. Como la respuesta. Una consulta, sin embargo: si libpthread es parte de libc/glibc, ¿por qué se proporciona como una biblioteca separada? Casi todas las bibliotecas se vinculan a libc y luego, lo que entonces era la necesidad de libpthread – Kiran

+0

@Kiran "¿Por qué se proporciona como una biblioteca separada?" Porque muchos programas no necesitan subprocesos, y la vinculación en 'libpthread' impone una sobrecarga innecesaria en tales programas. –

Cuestiones relacionadas