Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

108
Views
Biblioteca portátil .so para Linux

Estoy escribiendo una aplicación de Python que funciona con gráficos y depende de la biblioteca PySDL2 . PySDL2 depende de la biblioteca binaria SDL2 compilada que se puede descargar desde el sitio SDL . Escribí un script de arranque para automatizar el proceso , pero solo funciona para Windows, porque no hay descarga binaria para Linux.

La pregunta es ¿cómo hacer esa descarga binaria de SDL2 para Linux?

No está claro si es posible crear un archivo .so que funcione en todos los Linux, si es porque es imposible crear un archivo .so que funcione en cada CPU, y eso se debe principalmente a que no está claro si ya se hizo algún trabajo en esta dirección (estoy seguro de que la gente trató de investigar este problema) y si es así, ¿por qué no se adoptó el formato de archivo portátil .so (multiplataforma contra diferentes distribuciones y CPU).

ACTUALIZACIÓN : no me importa instalar dependencias (paquetes) con actualizaciones y correcciones de seguridad proporcionadas por la comunidad de Linux, pero esto debe hacerse en el espacio del usuario y necesito la capacidad de automatizarlo con scripts portátiles.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No hagas esto.

La forma más confiable sería hacer una pila de biblioteca estática completa.

Pero esto inflará totalmente su aplicación y si alguna vez hay algún problema de seguridad en estas bibliotecas, deberá actualizarlo usted mismo y todos sus usuarios deberán volver a descargar.

Al utilizar las bibliotecas de SDL proporcionadas por la distribución, su aplicación se beneficiará de las correcciones de errores y actualizaciones de SDL realizadas por la comunidad de Linux .

Considere proporcionar paquetes para las distribuciones más comunes (es decir, Debian, Ubuntu, Redhat, Fedora) que luego tengan dependencias adecuadas en la biblioteca SDL proporcionada por la distribución.

Cuando observa cómo Skype, Google, etc. distribuyen sus binarios, siempre está en un paquete específico de distribución, que luego puede funcionar con las bibliotecas del sistema. Por ejemplo Skype:

 Depends: libasound2 (>= 1.0.16), libc6 (>= 2.3.6-6~), libc6 (>= 2.7), libgcc1 (>= 1:4.1.1), libqt4-dbus (>= 4:4.5.3), libqt4-network (>= 4:4.8.0), libqt4-xml (>= 4:4.5.3), libqtcore4 (>= 4:4.7.0~beta1), libqtgui4 (>= 4:4.8.0), libqtwebkit4 (>= 2.1.0~2011week13), libstdc++6 (>= 4.6), libx11-6, libxext6, libxss1, libxv1, libssl1.0.0

Como puedes ver, skype no trae todas sus bibliotecas incluidas. Al instalar Skype, es posible que el usuario deba confiar en su administrador de paquetes para resolver estas dependencias.

Además, los usuarios de Linux son muy reacios a descargar o instalar binarios . Si realmente quiere que la gente use su "aplicación", es mejor que sea de código abierto y que alguien la incluya con las principales distribuciones de Linux. Linux no es Windows. Una de las razones por las que hay pocos virus en Linux es que la mayoría de la gente no descarga software que no es de confianza .

over 4 years ago · Santiago Trujillo Report

0

En cuanto a arquitecturas de CPU, Linux no tiene soporte para Fat Binaries (más que arquitectura por binario, algo que sí está disponible en OS X por ejemplo). Hubo una propuesta llamada Fat ELF por Ryan Gordon que lamentablemente no llegó a ninguna parte.

En el caso particular de SDL2, la biblioteca enlaza por defecto con muy pocas bibliotecas:

ldd /usr/local/lib/libSDL2.so

 linux-vdso.so.1 => (0x00007fffd1f0b000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f414c44e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f414c24a000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f414c02c000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f414be24000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f414ba5c000) /lib64/ld-linux-x86-64.so.2 (0x00007f414cac4000)

El resto de los binarios de los que depende SDL se cargan dinámicamente (usando dlopen), y SDL es bastante adaptable a diferentes versiones de ciertos binarios. Entonces, en resumen, si compila en un sistema con ciertas versiones de libc, libpthread, etc. y logra encontrar un sistema diferente con binarios compatibles, tiene buenas posibilidades de que el binario SDL al menos se ejecute. En la práctica, es mejor que dependa del sistema binario provisto, o acepte que admitirá un conjunto limitado de distribuciones con su SDL2 personalizado.

Tenga en cuenta que esta limitación también se aplica si vincula SDL de forma estática. Y si cree que puede seguir agregando binarios vinculados estáticamente hasta que haya creado una bola estática de varios cientos de megas que se ejecuta en cualquier lugar (¡como lo hice yo!), Existen otras limitaciones que le impiden hacerlo, desde problemas de licencia hasta fallas de segmento. debido a la vinculación de libpthread estáticamente.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!