So, let’s assume you want to attack using mDNS also known as Zeroconf on Linux to advertise your new service in a modern, portable, discoverable way with no pain on the user’s part? Simple, just pop over to http://avahi.org and look at the examples. Compile them, try them out. If you’re on a Mac, avail yourself of Bonjour Browser to have a look at the services popping in and out of existence as you test it. There may be a Linux zeroconf service browser, but I didn’t find one ready to go. If you know of one, please add it into the comments!
Wait, you’re saying you can’t get it to compile and link? Ah. Yes, so there’s two normal landmines people step on in Linux development. The first one can be solved by a general rule of thumb. You need the avahi-devel packages to be installed so you can use the headers in the examples and in your software that allow you to link into the avahi ABI. On an RPM-based system, yum install avahi-devel will get you there. Normally, pacakagename-devel is going to get you these developer libraries. Avahi is already on most RPM distros so you can have your software run out of the box without this install on the target machine. You just need it for development and compilation of the binary.
Wait, still not working you say? Ah. You’re getting a few pages of “undefined reference” you say? All to avahi functions? So you try the link flag -lavahi as that usually gets it right? No go. libavahi doesn’t exist. So you go googling. I did all this. It’s an interpretive pain. Here’s the magic incantation to build the service publishing example:
gcc avahitest.c -lavahi-glib -lavahi-core -lavahi-common -lavahi-client
That links in all the avahi libraries I could find (and you don’t really need them all, but they are listed here for completeness). Then it runs and works brilliantly. If you’re wondering where all these are located, it’s in /usr/lib64 at least on x86_64 Fedora.
I wandered through the avahi wiki at some speed, and couldn’t find anything simply listing this time-consuming necessity. So I’m posting it here in the hopes that a future frustrated searching developer might find just a bit of relief and save themselves a bunch of blind stumbling to little effect.
Currently playing in iTunes: Know Us by Jillian Ann