First. it would be best for you to define your custom appenders in a namespace other than log4cxx.
Second, you declare a constructor, destructor and close method for VirtualAppender, but you did not provide an implementation. Unless you compiled and linked in a file that looked like: #include "VirtualAppender.h" log4cxx::VirtualAppender::VirtualAppender() { } log4cxx::VirtualAppender::~VirtualAppender() { } void log4cxx::VirtualAppender::close() { } Then the linker would be expected to complain that there was no implementation provided.