statically linking release build on mac

Patrick Stinson patrickstinson.lists at gmail.com
Thu May 22 14:13:46 EDT 2008


I get an error reporting an unfound symbol using a statically linked release
build of python2.5 on a OSX-Tiger. This works fine on leopard, where the
system default python is version 2.5.1 - the same version that I'm using to
link to.

Sorry, I'm currently screwing with my configs and don't have a build to run
(my bad :) anymore, but the error is basically this:

Undefined symbol: _PY_DebugFlag
Referenced From: <my exe>
Expected in: <core audio framework lib image location>

I moved the system python frameworks out of the frameworks path for the
build and run just to make sure that they weren't somehow getting in the
way. I found that that symbol is defined in pydebug.h for both release and
debug builds. Also, I discovered that I can fix the problem with some of my
targets (I have both standalone exe and plugin lib versions of my app code)
by referencing the variable directly like this: int mine = Py_DebugFlag,
which fixes that symbol but then the next symbol in pydebug (PY_VerboseFlag)
is reported as undefined. After some playing with it, I found that the
following code will fix the problem in a basic standalone app:

    int _________mine;
    void *__________p = NULL;
    _________mine = Py_DebugFlag;
    _________mine = Py_VerboseFlag;
    _________mine = Py_InteractiveFlag;
    _________mine = Py_OptimizeFlag;
    _________mine = Py_NoSiteFlag;
    _________mine = Py_UseClassExceptionsFlag;
    _________mine = Py_FrozenFlag;
    _________mine = Py_TabcheckFlag;
    _________mine = Py_UnicodeFlag;
    _________mine = Py_IgnoreEnvironmentFlag;
    _________mine = Py_DivisionWarningFlag;
    _________mine = _Py_QnewFlag;
    __________p = (void *) _PyOS_ReadlineTState;
    __________p = (void *) PyOS_ReadlineFunctionPointer;


Woah, don't I feel like the lib is jerking me around a little? Anyway, this
works if I put it in main() for a standalone target, in a semi-random class
constructor for the AudioUnit target, and I still can't find the right place
to put it for the RTAS (
http://www.digidesign.com/index.cfm?query=developers%20plugin_info%20rtas.cfm&langid=1)
target. It's a little weird that I'm getting this at runtime and not at
link-time since I'm linking statically.

This is the standalone main() that works, but fails if I remove the above
code:

#include <Python.h>

int main(int, char **)
{
  int mine = -1;
  void *p = NULL;

  mine = Py_DebugFlag;
  mine = Py_VerboseFlag;
  mine = Py_InteractiveFlag;
  mine = Py_OptimizeFlag;
  mine = Py_NoSiteFlag;
  mine = Py_UseClassExceptionsFlag;
  mine = Py_FrozenFlag;
  mine = Py_TabcheckFlag;
  mine = Py_UnicodeFlag;
  mine = Py_IgnoreEnvironmentFlag;
  mine = Py_DivisionWarningFlag;
  mine = _Py_QnewFlag;
  p = (void *) _PyOS_ReadlineTState;
  p = (void *) PyOS_ReadlineFunctionPointer;

  Py_Initialize();

  Py_Finalize();
}


It seems to me like this might have something to do with setting up a symbol
lookup table correctly or something, I don't know. I'm not having any
problems with debug builds. This is the relevant part of my config.status.

ac_cs_version="\

python config.status
2.5

configured by ./configure, generated by GNU Autoconf
2.59,

  with options \"'--enable-universalsdk' '--disable-shared'\"


Help? *whimper*.. Cheers.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080522/3efdd325/attachment.html>


More information about the Python-list mailing list