While I make my cpp source files linking ZeroMQ under Ubuntu, I got following error:

/usr/bin/ld: test_server.o: undefined reference to symbol ‘zmq_strerror’ /usr/bin/ld: note: ‘zmq_strerror’ is defined in DSO /usr/local/lib/libzmq.so.3 so try adding it to the linker command line /usr/local/lib/libzmq.so.3: could not read symbols: Invalid operation

The ZeroMQ library has already installed. By checking the man:

Libraries have been installed in: /usr/local/lib

If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR’ flag during linking and do at least one of the following:

  • add LIBDIR to the `LD_LIBRARY_PATH’ environment variable during execution
  • add LIBDIR to the `LD_RUN_PATH’ environment variable during linking
  • use the `-Wl,-rpath -Wl,LIBDIR’ linker flag
  • have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages.

I get rid of the error by following steps:

  1. install libtool;
  2. add the library path to LD_LIBRARY_PATH;
  3. use root to make.

I think the last one, using root to make, is the key point. Why?