Implementing a Custom Class

Hello Root Support,
I am having some trouble understanding how to properly compile a program which incorporates a class that extends off TObject.
I have a custom class which extends off of TObject called CoreasEvent. Within my main program, I read a tree that stores this custom class. My classes are able to compile into object files just fine, but the problem arises when I attempt to link the objects and create an executable. Attempting to do so results in the following errors:

g++ -O vector.o assa.o  `/u/osgstorage/anita/root/bin/root-config --glibs`  -o assa.exe
assa.o: In function `__static_initialization_and_destruction_0':
~/scripts/assa/assa_root/ undefined reference to `CoreasEvent::CoreasEvent()'
assa.o: In function `getCRSignal(TTree*, double, double, double, double, double, double, double, double, double, double, double, std::vector<double, std::allocator<double> >&)':
~/scripts/assa/assa_root/ undefined reference to `CoreasEvent::getOffAngles()'
collect2: ld returned 1 exit status
make: *** [assa.exe] Error 1

The second error especially confuses me because I have confirmed getOffAngles is indeed a function of CoreasEvent.
Another question: what is the difference between using a shared library generated by running .L and manually creating your own dictionary using rootcint and a Linkdef file?
Any help would be appreciated, thank you!

ROOT User’s Guide - Chapter 15. Adding a Class
ROOT User’s Guide - Chapter 15. Adding a Class - Adding a Class with a Shared Library
ROOT User’s Guide - Chapter 15. Adding a Class - Adding a Class with ACLiC
ROOT - Frequently Asked Questions - How to generate a dictionary
[url]Adding a class: hand holding requested
[url]Problems Building a class into a shared library
[url]Adding Classes in ACLiC
[url]Root Tree Custom Objects
Selecting Dictionary Entries: Linkdef.h
Interacting with Shared Libraries: rootcint
Adding Your Class to ROOT: ClassDef
[url]Simple way to create and merge shared libraries?

Hi Wile E., thank you for responding.
I read through your links and wanted to make my question a little bit more specific:
In what cases do I need to generate/compile a dictionary? If I already generated a .so file for CoreasEvent within root, can I use that .so file or do I still need to generate a dictionary for CoreasEvent and link it when compiling my executable.

It is quite possible that you can reuse the shared library which ROOT generated (just try to add it to the linking command line, right after your object files).