1 Comment

A while ago, the build process of ndn-cxx and ndnSIM was modified to building a shared library in favour of a static library. Unfortunately, there are some problems with (re-)building ndnSIM in its current version (dd516fe9ed73992d2f253a53fc5b21523c99a72a, June 24):

error while loading shared libraries: libndn-cxx.so.0.3.2: cannot open shared object file: No such file or directory

This is caused by the build process in combination with the location of libndn-cxx.so. On my system (ubuntu 14.04) the library is located at /usr/local/lib/, however, this is not a standard-path that waf/wscript looks for the library.
Nevertheless, with PKG CONFIG in place, this should not be a problem, all we need to do is use the information from PKG CONFIG and put it into the NS3_MODULE_PATH.
This can be achieved by modifying the ndnSIM wscript file (usually located in ns-3/src/ndnSIM).
conf.check_cfg(package='libndn-cxx', mandatory=True, uselib_store='NDN_CXX', args=['--libs', '--cflags'])

The change to the scenario template is exactly the same.

An alternative change is to create a symbolic link to libndn-cxx.so in /usr/lib/x86_64-linux-gnu (however I have not tested this).

1 Comment

Update Oct. 7th: As of version 2.1, ndn-cxx and NFD are now "integrated" in the ndnSIM git repository, therefore this post is now obsolete.

Update June 25th: ndn-cxx must be compiled as a shared library now! Changes are already included in this tutorial, but you must also follow the information provided here: ndn-cxx and ndnSIM - shared library problem.

If you ever wondered what you have to do to get ndnSIM + ndn-cxx run without having root access, then this is the right guide.
However, I do assume that SOMEONE does have root access and can install standard-libraries for you.
This is what it looks like on Ubuntu 14.04 (64 bit):

Make your administrator install the following packages (if not already installed)

sudo apt-get install build-essential libsqlite3-dev libcrypto++-dev libboost-all-dev
sudo apt-get install pkg-config git

And then continue with the following commands yourself (assuming you are in your home directory):

mkdir ndnSIM
cd ndnSIM
git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
git clone https://github.com/named-data/ndn-cxx.git ndn-cxx
git clone https://github.com/cawka/ns-3-dev-ndnSIM.git ns-3
git clone https://github.com/cawka/pybindgen.git pybindgen
git clone https://github.com/named-data/ndnSIM.git ns-3/src/ndnSIM
cd ndn-cxx
./waf configure --prefix /home/$USER/ndnSIM/usr/local/ --enable-shared --disable-static
./waf install

export LIBRARY_PATH=/home/$USER/ndnSIM/usr/local/lib/
export LD_LIBRARY_PATH=/home/$USER/ndnSIM/usr/local/lib/
export CPLUS_INCLUDE_PATH=/home/$USER/ndnSIM/usr/local/include/
cd ..
cd ns-3/

./waf configure --prefix /home/$USER/ndnSIM/usr/local/ -d optimized --disable-python
./waf install

You may copy the exports into your .bashrc file and adapt them like this:

export LIBRARY_PATH=/home/$USER/ndnSIM/usr/local/lib/:$LIBRARY_PATH
export LD_LIBRARY_PATH=/home/$USER/ndnSIM/usr/local/lib/:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/$USER/ndnSIM/usr/local/lib/pkgconfig
export CPLUS_INCLUDE_PATH=/home/$USER/ndnSIM/usr/local/include/:$CPLUS_INCLUDE_PATH

New Project: amus-ndnSIM
Blending Adaptive Multimedia Streaming (e.g., MPEG-DASH) with Named-Data Networking (NDN) using the ndnSIM simulation software.

Step 1: Install ndnSIM 2.0
Step 2: Invent a file transfer protocol
Step 3: Write a client that can download files
Step 4: Add multimedia streaming
Step 5: ???
Step 6: Come up with a cooler name
Step 7: Profit

What could go wrong?