Pages : 1
#1 Le 04/01/2012, à 16:56
- magestik
[Résolu] LD_PRELOAD et Python
Bonjour,
Je suis en train de faire un petit wrapper OpenGL en C. Il marche plutôt bien sur la plupart des programmes en C/C++. Mais quand j'essaye de l'utiliser sur un programme Python qui utilise pyOpenGL ça plante !
LD_PRELOAD=./glQuadBufferEmu.so glxgears -stereo
Fonctionne sans problème :
QuadBufferEmuInit
...
mais
LD_PRELOAD=./glQuadBufferEmu.so python serveur.py
plante :
QuadBufferEmuInit
QuadBufferEmuInit
sh: symbol lookup error: /home/bastien/Documents/Stereo3D/Quad-Buffer-Emu/glQuadBufferEmu.so: undefined symbol: dlopen
QuadBufferEmuInit
sh: symbol lookup error: /home/bastien/Documents/Stereo3D/Quad-Buffer-Emu/glQuadBufferEmu.so: undefined symbol: dlopen
Traceback (most recent call last):
File "serveur.py", line 10, in <module>
from OpenGL.GL import *
File "/usr/lib/pymodules/python2.7/OpenGL/GL/__init__.py", line 2, in <module>
from OpenGL.raw.GL import *
File "/usr/lib/pymodules/python2.7/OpenGL/raw/GL/__init__.py", line 6, in <module>
from OpenGL.raw.GL.constants import *
File "/usr/lib/pymodules/python2.7/OpenGL/raw/GL/constants.py", line 7, in <module>
from OpenGL import platform, arrays
File "/usr/lib/pymodules/python2.7/OpenGL/platform/__init__.py", line 36, in <module>
_load()
File "/usr/lib/pymodules/python2.7/OpenGL/platform/__init__.py", line 27, in _load
plugin_class = plugin.load()
File "/usr/lib/pymodules/python2.7/OpenGL/plugins.py", line 14, in load
return importByName( self.import_path )
File "/usr/lib/pymodules/python2.7/OpenGL/plugins.py", line 28, in importByName
module = __import__( ".".join(moduleName), {}, {}, moduleName)
File "/usr/lib/pymodules/python2.7/OpenGL/platform/glx.py", line 8, in <module>
class GLXPlatform( baseplatform.BasePlatform ):
File "/usr/lib/pymodules/python2.7/OpenGL/platform/glx.py", line 20, in GLXPlatform
raise ImportError("Unable to load OpenGL library", *err.args)
ImportError: ('Unable to load OpenGL library', 'GL: cannot open shared object file: No such file or directory', 'GL', None)
Petite précision : ça marche quand je lance juste l'intérpreteur python
LD_PRELOAD=./glQuadBufferEmu.so python
QuadBufferEmuInit
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
[GCC 4.6.1] on linux2
...
Et bien sur, le programme python fonctionne si je fais pas mon PRELOAD :
python serveur.py
Appuyez sur ECHAP pour quitter
Appuyez sur F pour activer/désactiver le mode plein écran
...
Donc le problème viendrait de Python qui arrive pas à charger OpenGL si on a un wrapper (LD_PRELOAD) sur OpenGL ? Pourtant j'ai vu sur des sites que les wrapper avec LD_PRELOAD marchent avec Python ! Pourtant la première erreur dit qu'il trouve pas dlopen dans ma librairie pourtant quand c'est pas un programme python ça marche ...
Voilà le git contenant mon code : https://github.com/magestik/glQuadBufferEmu Tout ce qui concerne les dlopen est dans le fichier main.c !
Merci d'avance.
RESOLU : Il fallait mettre -ldl et -lglut à la fin de la ligne de compilation (gcc) !
Dernière modification par magestik (Le 04/01/2012, à 19:11)
Hors ligne
Pages : 1