2010-11-25 15 views
11

Tengo una biblioteca estática y una biblioteca dinámica con el mismo nombre: libclsocket.a y libclsocket.so Cuando especifico a qué biblioteca quiero vincular simplemente ingreso -lclsocket como la biblioteca. Mi programa cumple y funciona perfectamente bien, pero ¿qué biblioteca estoy usando? la biblioteca estática o la biblioteca dinámica? Quiero darle a mi amigo mi programa y no estoy seguro si necesito incluir las bibliotecas en el lanzamiento. C++, codelite, pcLinuxOS 2010En Linux, ¿cómo puedo saber si estoy enlazando a una biblioteca estática o dinámica?

+7

No especificó el indicador '-estático' cuando compila con GCC, por lo que es muy probable que esté enlazando con el objeto compartido. Como respondió @Soo Wei Tan, puede usar 'ldd' en el binario para determinar sus dependencias del enlazador en tiempo de ejecución. – birryree

+0

¿Puedo especificar que quiero que la biblioteca esté vinculada estáticamente? – TheFuzz

+1

puede hacer un enlace estático selectivo al pasar el nombre completo de la biblioteca. Como 'gcc -o OutFile -l: libclsocket.a'. Tenga en cuenta el ':', es muy importante. Me gustaría encontrar documentación oficial para este comportamiento, pero las páginas de manual de 'gcc' no mencionan este uso. – birryree

Respuesta

5

Puede intentar ejecutar ldd en el ejecutable y ver si se está detectando .so como se requiere en la lista de dependencias.

ldd página de manual es here.

+0

Está vinculando a las bibliotecas compartidas. Entonces, ¿cómo me vincularía a una lib estática? También estoy asumiendo que está predeterminado a bibliotecas compartidas. – TheFuzz

2

Si usa el indicador -static, todos los componentes se convertirán en estáticos. Y -l puede incluir bibliotecas compartidas. Por lo tanto, especificar el nombre de archivo de la biblioteca estática (por ejemplo, con /usr/lib/libfoo.a por ejemplo, no -l antepuesto), debe obtener el efecto deseado.

Cuestiones relacionadas