Reputation: 564
I was wondering if anyone could help me figure this out. When i try to python setup.py build (or pip install, or easy_install), this happens
the gist is
src/png_io.c:3:17: error: png.h: No such file or directory
src/png_io.c: In function ‘newMMBitmapFromPNG’:
src/png_io.c:34: error: ‘png_struct’ undeclared (first use in this function)
src/png_io.c:34: error: (Each undeclared identifier is reported only once
... bunch of errors ...
src/png_io.c:332: error: ‘PNG_TRANSFORM_IDENTITY’ undeclared (first use in this function)
lipo: can't figure out the architecture type of: /var/folders/kt/d8t29zkx7kd_7c_mr17ntv6m0000gn/T//ccubs4CM.out
error: command 'gcc-4.2' failed with exit status 1
libpng is in Library/Frameworks, which is on the search path for < > includes (i checked with cpp -v), but its in there as libpng.framework, and then the headers are in a subdirectory called headers. There are also several versions of libpng in the libpng.framework file. I'm also running 64bit python. Any ideas how to proceed?
Thanks, Pat
Upvotes: 7
Views: 1722
Reputation: 8229
In this particular case, it's because you're missing libpng. (The framework with png.h)
You can install it from http://ethan.tira-thompson.com/Mac_OS_X_Ports.html then re-run the autopy install and you should be good to go!
Upvotes: 0
Reputation: 3642
The error is, as you guessed, because the compiler can't find the header file png.h
Can you tell me how the framework is being included? Are you using -I and -L?
The correct syntax for including a framework with GCC is
gcc -F*dir*
or
gcc -iframework*dir*
Hope this helps
From http://gcc.gnu.org/onlinedocs/gcc/Darwin-Options.html
-Fdir Add the framework directory dir to the head of the list of directories to be searched for header files. These directories are interleaved with those specified by -I options and are scanned in a left-to-right order.
A framework directory is a directory with frameworks in it. A framework is a directory with a Headers and/or PrivateHeaders directory contained directly in it that ends in .framework. The name of a framework is the name of this directory excluding the .framework. Headers associated with the framework are found in one of those two directories, with Headers being searched first. A subframework is a framework directory that is in a framework's Frameworks directory. Includes of subframework headers can only appear in a header of a framework that contains the subframework, or in a sibling subframework header. Two subframeworks are siblings if they occur in the same framework. A subframework should not have the same name as a framework, a warning will be issued if this is violated. Currently a subframework cannot have subframeworks, in the future, the mechanism may be extended to support this. The standard frameworks can be found in /System/Library/Frameworks and /Library/Frameworks. An example include looks like #include <Framework/header.h>, where Framework denotes the name of the framework and header.h is found in the PrivateHeaders or Headers directory.
Upvotes: 2