I ran into the same issue. Even after running make.osx
, it still complained about _FT_Attach_File
being undefined when I imported ft2font
from matplotlib. Here's how I tracked down the problem. Hopefully, it will help someone else.
Running otool -L ft2font.so
yielded:
ft2font.so:
/Users/jbenuck/mpl_build/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
Note the absence of any mention of libfreetype! How is ft2font.so
supposed to locate the symbol if it isn't linked against it?
My next step was to capture the commands used during the build:
make -f make.osx PREFIX=/usr/local clean fetch deps mpl_build > output.txt
Searching this yielded the command that was used to compile the offending python module. I changed the value of the output file to be one in my local directory and ran it:
/Developer/usr/bin/llvm-g++-4.2 -bundle -undefined dynamic_lookup -isysroot / -L/opt/local/lib -arch i386 -arch x86_64 -L/usr/local/lib -syslibroot,/Developer/SDKs/MacOSX10.7.sdk -arch i386 -arch x86_64 -I/usr/local/include -I/usr/local/include/freetype2 -isysroot /Developer/SDKs/MacOSX10.7.sdk build/temp.macosx-10.7-x86_64-2.7/src/ft2font.o build/temp.macosx-10.7-x86_64-2.7/src/mplutils.o build/temp.macosx-10.7-x86_64-2.7/CXX/cxx_extensions.o build/temp.macosx-10.7-x86_64-2.7/CXX/cxxsupport.o build/temp.macosx-10.7-x86_64-2.7/CXX/IndirectPythonInterface.o build/temp.macosx-10.7-x86_64-2.7/CXX/cxxextensions.o -L/usr/local/lib -L/usr/local/lib -L/usr/lib -L/usr/X11/lib -lfreetype -lz -lstdc++ -lm -o ft2font.so
ld: warning: ignoring file /opt/local/lib/libfreetype.dylib, file was built for unsupported file format which is not the architecture being linked (x86_64)
Bingo! Problem found. I know I have both macports and homebrew installed. Apparently, one of them has a version of libfreetype
in /opt/local/lib
that isn't compiled for 64-bit.
I reran the command with "-L /opt/local/lib"
removed which worked without a warning. Copying the resulting ft2font.so
into my existing matplotlib installation now allows me to successfully import ft2font
from matplotlib.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…