January 27, 2012

So whats the story about libcouchbase and Windows?

A couple of days ago I showed you an example program using libcouchbase to create a small application to put data into a Couchbase cluster, but the code wouldn't compile on Windows. That does by no means imply that libcouchbase doesn't work on Windows, its more that I was in a hurry writing the blog post so I didn't have the time fixing everything up in time for the blog post.

In this blog post I'll show you how easy it is to get everything up'n'running using Windows 7 and Microsoft Visual Studio 2010. In addition to that you need to download and install git to be able to check out the source code (select the option that you want to put git in the path (not the full msys suite, but just git)).

I have to admit that I am far from a "hardcore Windows developer", so there is a lot of things I don't know about the platform. For instance I don't know where I should install third party header files and libraries, so I just decided that I'm going to install all of them into C:\local (with an install, lib and bin directory). I'd be happy if someone could tell me how I'm supposed to do this ;-)

So let's open up the Visual Studio Command Prompt and start building everything:

Setting environment for using Microsoft Visual Studio 2010 x86 tools.
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC> <b>cd %HOMEPATH%</b>
C:\Users\Trond> <b>mkdir build</b>
C:\Users\Trond> <b>cd build</b>

Since we're going to build dll's you need to set C:\local\bin into your path so that the runtime linker finds the dll's:

C:\Users\Trond\build> <b>set PATH=c:\local\bin;%PATH%</b>

We need to install two dependencies before we can compile libcouchbase itself. Let's check out all of the source code we're going to use:

C:\Users\Trond\build> <b>git clone git://github.com/membase/libisasl.git</b>
C:\Users\Trond\build> <b>git clone git://github.com/membase/libvbucket.git</b>
C:\Users\Trond\build> <b>git clone git://github.com/couchbase/libcouchbase.git</b>
C:\Users\Trond\build> <b>git clone git://github.com/membase/memcached.git</b>
C:\Users\Trond\build> <b>git clone git://github.com/trondn/vacuum.git</b>
The first dependency we're going to build is the SASL library. This is the library libcouchbase use for authenticating to the Couchbase servers. To build and install the library, simply execute:
C:\Users\Trond\build> <b>cd libisasl</b>
C:\Users\Trond Norbye\build\libisasl> <b>nmake -f NMakefile install</b>
That will install libisasl with its header files and libraries into c:\local.
 
The next library we need to build is libvbucket; the library libcouchbase use to figure out where a a vbucket is located (if you don't know what a vbucket is, you don't really need to know). It is just as easy as libvbucket to build:
C:\Users\Trond\build\libisasl> <b>cd ..\libvbucket</b>
C:\Users\Trond\build\libvbucket> <b>nmake -f NMakefile install</b>
The next thing we need to do is to install some headerfiles libcouchbase needs during build time. These header files contains the protocol definitions libcouchbase needs (but it is not needed by the application). So let's go ahead and install them (to make it easier for us to build libcouchbase)
C:\Users\Trond\build\libvbucket> <b>cd ..\memcached</b>
C:\Users\Trond\build\memcached> <b>git checkout -b branch-20 origin/branch-20</b>
C:\Users\Trond\build\memcached> <b>mkdir c:\local\include\memcached</b>
C:\Users\Trond\build\memcached> <b>copy include\memcached c:\local\include\memcached</b>
So let's go ahead and build libcouchbase!
C:\Users\Trond\build\memcached> <b>cd ..\libcouchbase</b>
C:\Users\Trond\build\libcouchbase> <b>nmake -f NMakefile install</b>
I guess that most Windows developers don't use nmake during their development, but use the full IDE instead. That's why I've created a project you may open in the vacuum project. So feel free to open that project now, and it should build without any problems. 
 
Now we're going to need a Couchbase server we can connect to. If you don't have any running, you should download and install one now. 
 
Let's go ahead and create the spool directory and start the vacuum server...
C:\Users\Trond\build\vacuum\Debug> <b>mkdir c:\vacuum</b>
C:\Users\Trond\build\vacuum\Debug> <b>vacuum -h 127.0.0.1:8091</b>
And you can start copy JSON files into C:\vacuum and see them being added to the Couchbase cluster!

Comments