OS X import bug?

Steven Majewski sdm7g at Virginia.EDU
Thu Jan 24 21:49:10 CET 2002


On Thu, 24 Jan 2002, Manoj Plakal wrote:

> Python 2.2+ (#1, Jan 17 2002, 10:33:30)
> [GCC 2.95.2 19991024 (release)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
>  >>> import foo
> var_for_foo = 1
>  >>> import bar
> Traceback (most recent call last):
>    File "<stdin>", line 1, in ?
> ImportError: Failure linking new module
>  >>>

I believe whenever I had a problem with duplicate symbols, the error
message actually said something about duplicate symbols.


The 'Failure linking new module' is the error I got from the
the 'PyObject_DelItemString' problem:
http://sourceforge.net/tracker/?group_id=5470&atid=105470&func=detail&aid=498915

(But the symptom of working for one import but not the other doesn't
 sound right.)
This bug was in 2.2. I don't know if it's fixed in the 2.2+ you seem
to be running, but it's worth checking.


Below is a patch that adds a call to NSLinkEditError, which will
give you a more explicit error message about what's wrong. It's
how I discovered which symbol was the problem with that bug:

>>> import pyobjc
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ImportError: dyld: /usr/local/src/Python-2.2/python.exe Undefined symbols:
_PyObject_DelItemString
Failure linking new module
>>>


-- Steve


*** dynload_next.c.0	Fri Jan 18 13:50:06 2002
--- dynload_next.c	Fri Jan 18 14:08:13 2002
***************
*** 150,157 ****
  		if (errString == NULL) {
  			newModule = NSLinkModule(image, pathname,
  				NSLINKMODULE_OPTION_BINDNOW|NSLINKMODULE_OPTION_RETURN_ON_ERROR);
! 			if (!newModule)
! 				errString = "Failure linking new module";
  		}
  		if (errString != NULL) {
  			PyErr_SetString(PyExc_ImportError, errString);
--- 150,164 ----
  		if (errString == NULL) {
  			newModule = NSLinkModule(image, pathname,
  				NSLINKMODULE_OPTION_BINDNOW|NSLINKMODULE_OPTION_RETURN_ON_ERROR);
! 			if (!newModule) {  // sdm7g
! 			  int errNo;
! 			  char *fileName, *moreErrorStr;
! 			  NSLinkEditErrors c;
! 			  errString = "Failure linking new module";
! 			  NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr );
! 			  errString = strcat( fileName, errString );
! 			  errString = strcat( moreErrorStr, errString );
! 			} // sdm7g
  		}
  		if (errString != NULL) {
  			PyErr_SetString(PyExc_ImportError, errString);







More information about the Python-list mailing list