[Nice] Compilation of libnice code

Daniel Lobo dlobo at student.dei.uc.pt
Fri Feb 15 08:27:14 PST 2013

This is not a question, but some kind of help for people with problems 
compiling libnice examples. I was very surprised to find that no one 
ever asked how to compile code using libnice, seeing as instructions 
were impossible for me to find. Am I missing something really obvious?

Anyway, I have, for the past 4 days, been trying to compile and use a 
C/C++ library that allows P2P communication for my project. After giving 
up for now on the massively hard libjingle (hard to compile, hard to 
understand, examples with thousands of lines...), I tried libnice.

Compiling the library (Windows and Linux):

I successfully compiled libnice under Windows, using VS (just follow the 
readme given in the libnice package), and under Linux. If you are 
compiling libnice in Linux, and are unexperienced like I am (the readme 
instructions are nonexistent), know that you have to run (inside the 
libnice folder) ./autogen.sh (run "chmod +x autogen.sh" if it gives 
errors about permissions), ./configure, make, sudo make install, in this 

You *might* need to do some apt-gets before (glib-2.0?), but I can't 
remember if that was true for me (I tried loooots of things when 
attempting to build). If this is the case, I'm sorry that I can't help 
enough, but I can't remember all that I did (besides, I believe you can 
find most errors on the web, and they should direct you to some missing 
library that can be acquired with apt-get).

Compiling examples:

After compiling, the thing was: I couldn't (and still can't) find 
instructions on how to compile libnice examples, or what libraries and 
paths to include. I tried to compile the example at 
http://nice.freedesktop.org/libnice/NiceAgent.html (inside a main method 
and using #include "agent.h") but I had to do a lot of trial and error 
on code callbacks, linkage libraries, include paths, etc. Besides, there 
was an undeclared variable "rcands" and, as of this writing, I still 
haven't understood the theory about candidates.

I finally gave up after many many many undefined references of various 

The ONLY thing that did save me was something called pkg-config.

Apparently, pkg-config is a tool that knows what flags you have to use 
when compiling and linking your code with some libraries. One of the 
libraries which it can help is "nice" (libnice).


If you are using Eclipse, like me, go to "Help -> Install New 
Software...", use 
http://petrituononen.com/pkg-config-support-for-eclipse-cdt/update as 
the "Work with" site and select and install the plugin.

Then, on your project with the examples you want to run, go to 
Properties -> C/C++ Build -> Pkg-config tab and select "nice". That 
should set the correct includes, flags and libraries in the "Tool 
Settings" tab. Now it's hopefully just a matter of using the right 
#includes in your code.

For those without Eclipse and wanting to know the paths and libraries, 
this is what pkg-config gave me in Linux:

GCC C/C++ Compiler -> Includes -> Include paths (-I):

Compiler (C or C++) -> Miscellaneous -> other flags:
(in addition to -c -fmessage-length=0)

GCC C++ Linker -> Libraries -> Libraries (-l):

GCC C++ Linker -> Libraries -> Library search path:

If it helps, Eclipse ended up doing something like:

g++ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include 
-I/usr/local/include/nice -O0 -g3 -Wall -c -fmessage-length=0 -pthread 
-MMD -MP -MF"test.d" -MT"test.d" -o "test.o" "../test.cpp"

g++ -L/usr/local/lib -o "libnice_tests"  ./test.o   -lnice -lgthread-2.0 
-lrt -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lnice -lgthread-2.0 -lrt 
-lgio-2.0 -lgobject-2.0 -lglib-2.0

pkg-config in Linux:

You can naturally also download and run pkg-config by itself (without 
Eclipse) to get all of this, but I didn't do this so please bear with me 
and search the web for a bit on the generic way to use pkg-config :) It 
should be something like: gcc -o test test.c `pkg-config --libs --cflags 

pkg-config in Windows:

Try to download pkg-config already pre-compiled from somewhere like:
The rest is the same as in Linux, but the problem is: pkg-config needs 
some things set on path variables to detect the installed libraries and 
I couldn't get it to work, not even in Eclipse :(

I hope some of this actually helps someone...

More information about the nice mailing list