Python import error: Symbol not found, but the symbol is present in the file
- by Autopulated
I get this error when I try to import ssrc.spread:
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ssrc/_spread.so, 2): Symbol not found: __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
The file in question (_spread.so) includes the symbol:
$ nm _spread.so | grep _ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
U __ZN17ssrcspread_v1_0_67Mailbox11ZeroTimeoutE
(twice because the file is a fat ppc/x86 binary)
The archive header information of _spread.so is:
$ otool -fahv _spread.so
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture ppc7400
cputype CPU_TYPE_POWERPC
cpusubtype CPU_SUBTYPE_POWERPC_7400
capabilities 0x0
offset 4096
size 235272
align 2^12 (4096)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
capabilities 0x0
offset 241664
size 229360
align 2^12 (4096)
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ssrc/_spread.so (architecture ppc7400):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC PPC ppc7400 0x00 BUNDLE 10 1420 NOUNDEFS DYLDLINK BINDATLOAD TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ssrc/_spread.so (architecture i386):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC I386 ALL 0x00 BUNDLE 11 1604 NOUNDEFS DYLDLINK BINDATLOAD TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK
And my python is python 2.6.4:
$ which python | xargs otool -fahv
Fat headers
fat_magic FAT_MAGIC
nfat_arch 2
architecture ppc
cputype CPU_TYPE_POWERPC
cpusubtype CPU_SUBTYPE_POWERPC_ALL
capabilities 0x0
offset 4096
size 9648
align 2^12 (4096)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
capabilities 0x0
offset 16384
size 13176
align 2^12 (4096)
/Library/Frameworks/Python.framework/Versions/2.6/bin/python (architecture ppc):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC PPC ALL 0x00 EXECUTE 11 1268 NOUNDEFS DYLDLINK TWOLEVEL
/Library/Frameworks/Python.framework/Versions/2.6/bin/python (architecture i386):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC I386 ALL 0x00 EXECUTE 11 1044 NOUNDEFS DYLDLINK TWOLEVEL
There seems to be a difference in the ppc architecture in the files, but I'm running on an intel, so I don't see why this should cause a problem.
So why might the symbol not be found?