Compiling libpng in Visual Studio .NET {2005}

Ξ March 1st, 2008 | → 0 Comments | ∇ code, Projects, Computing |

There is very spotty documentation on how to use libpng under Windows. I did find one site that talks about the subject, so you might want to refer to it as well.

1. Libpng Setup:

First, you’ll need to download the latest version of libpng and zlib. Extract them someplace (I placed them within my projects root, in a directory called ‘deps’). The pre-canned Visual Studio settings that come with libpng look for ‘zlib’ rather than ‘zlib-x.y.z’, so rename the directories so that they lack the version numbers.

2. Compiling libpng and zlib

Next go into <projectname>\deps\libpng\projects\visualc71 and open libpng.sln. Go to Build and run ‘Clean Solution’. Now you have a choice, you can either compile libpng as a dynamically loaded library, or a binary blob to statically link into your executable. You can compile either one as a debug or release build. Just make sure that whichever way you compile libpng (debug/release), is the same as what you compile your project. So choose an option, and go to Build -> Build Solution. This will compile both libpng and zlib.

3. Project Setup

Now you’ll need to set your project up to include the libpng and zlib files. Open your Visual Studio project, and go to Project -> <projectname> Properties. Expand Configuration Properties, and then expand C/C++. The top field on the right will read “Additional Include Directories”. Click it and add “C:\<projectname>\deps\zlib;C:\<projectname>\deps\libpng”.

Now close the C/C++ tree and expand the Linker tree, which is directly below it. Roughly 3/4 of the way down is a field called “Additional Library Directories”. Click it and add


In my case, I compiled as Win32_LIB_Debug (Statically Linked, Debug Symbols included), so that’s what I set <projecttypeyoucompiledas> to.

Next open the Input node that is in the Linker tree. Under “Additional Dependancies” add libpngd.lib zlibd.lib if you chose to statically link, or libpng13d.lib zlib1d.lib if you compiled it as a dll. If you did compile as a dll, you will then need to copy the dll’s that were generated to the same directory as your executable, or to a directory loaded in PATH.

Now you can implement PNG reading or writing into your project.

4. Troubleshooting

Q: I get a ton of linking errors!
A: Visual Studio cannot find the lib files. Double check that they are compiled (libpng{..}.lib, zlib{…}.lib), that your projects Library dependancies includes the directories that they are in, and that the lib files are included in the Additional Dependancies field.

Q: Visual Studio spits out errors about undeclared identifiers!
A: Make sure you have #include <png.h> in your source. Also make sure that png.h’s path is included under Additional Included Directories in your projects settings.

Original post by ojuice


Blife Ports

Ξ February 2nd, 2008 | → 0 Comments | ∇ Projects, blife |

Stock and I got blife running on Mac OS X yesterday. We figured that in theory it should compile out-of-the-box since I had OS X’s OpenGL and GLUT headers in their own #ifdef clause. However, we found that linking to libraries works a bit different on OS X as opposed to the other Unix’s. On Linux, FreeBSD, etc., executables are linked to libraries by passing “-l<libraryname>” to the linker. So in this case, GLUT is linked to blife by passing “-lglut” to he linker. However, on OS X, you need to use “-framework <libraryname>”, so”-framework OpenGL -framework GLUT” gets used.
When blife 0.2.5 is released, there will be a OS X specific section in the Makefile, so OS X users can simply “make osx” and have the proper binary built.
With that said, blife has been compiled and works properly in GNU/Linux, FreeBSD, Windows, and OS X. […]

Original post by ojuice


Blife Plans

Ξ January 11th, 2008 | → 0 Comments | ∇ Projects, blife |

blife is the cellular automaton program that I’ve been working on for the past few months. I wrote most of it in mid-November and have been touching up bits of it ever since. It’s currently written in C and runs Conway’s Game of Life rule set (23/3). I’m going to be rewriting it over the next month in C++ and implementing a generic engine so that is can run other rule sets specified at run time. If you’d like to help out, or keep up to date on the new version, please email me at, and I’ll keep you in the loop.

Original post by ojuice


  • Rumours and Lies