Note that there are some explanatory texts on larger screens.

plurals
  1. POCtypes "symbol not found" for dynamic library in OSX
    primarykey
    data
    text
    <p>I have made a C++ library and have built a .dylib dynamic library from it. However when I load it with ctypes, it fails. Something doesn't seem to have linked properly. I have no idea why. The error (The relevant part):</p> <pre><code> cscalelib.setup_framebuffer(flip,surface.frame_buffer,surface.texture,surface._scale[0],surface._scale[1]) File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/__init__.py", line 325, in __getattr__ func = self.__getitem__(name) File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/ctypes/__init__.py", line 330, in __getitem__ func = self._FuncPtr((name_or_ordinal, self)) AttributeError: dlsym(0x56ecd0, setup_framebuffer): symbol not found </code></pre> <p>Here's the C++ code which is still in progress but should work with what I have so far.</p> <pre><code>#include &lt;OpenGL/gl.h&gt; #include &lt;OpenGL/glu.h&gt; #include &lt;vector.h&gt; void setup_framebuffer(bool flip,GLuint frame_buffer_id,GLuint texture_id,int width,int height){ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frame_buffer_id); glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture_id, 0); glPushAttrib(GL_VIEWPORT_BIT); glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //Load the projection matrix if (flip){ gluOrtho2D(0,width,height,0); }else{ gluOrtho2D(0,width,0,height); } } void end_framebuffer(){ glPopAttrib(); glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //Load the projection matrix gluOrtho2D(0,1280,720,0); //Set an orthorgraphic view } void add_lines(bool antialias,vector&lt; vector&lt;double&gt; &gt; coordinates,double w,double r,double g, double b,double a){ glDisable(GL_TEXTURE_2D); if (antialias){ glEnable(GL_LINE_SMOOTH); //Enable line smoothing. } glColor4d(r,g,b,a); glLineWidth(w); glBegin(GL_LINE_STRIP); for (int x = 0; x &lt; coordinates.size(); x++) { glVertex2d(coordinates[x][0],coordinates[x][1]); } glEnd(); if (antialias){ glDisable(GL_LINE_SMOOTH); //Disable line smoothing. } glEnable(GL_TEXTURE_2D); } </code></pre> <p>I compiled it with:</p> <p>g++ -dynamiclib CPPEXTSCALELIB.cp -framework opengl -arch i386 -o CPPEXTSCALELIB.dylib</p> <p>Here's the Python code with "..." to represent irrelevant parts.</p> <pre><code>... from ctypes import * ... cscalelib = CDLL(os.path.dirname(sys.argv[0]) + "/CPPEXTSCALELIB.dylib") ... def setup_framebuffer(surface,flip=False): #Create texture if not done already if surface.texture is None: create_texture(surface) #Render child to parent if surface.frame_buffer is None: surface.frame_buffer = glGenFramebuffersEXT(1) cscalelib.setup_framebuffer(flip,surface.frame_buffer,surface.texture,surface._scale[0],surface._scale[1]) ... </code></pre> <p>Thank you.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload