So I figured out what was going on...just in case someone else runs into this. A good way to find out where that duplicate definition is coming from in your code is to use the command:
nm -l name_of_object_file.o
nm is used to print the symbol table of an object file. I piped the output to a file and searched for main. The -l switch will print out line numbers for the symbols. This allowed me to see where that other pesky main definition was coming from.
For wxWidgets users:
The macro IMPLEMENT_APP(App)
was defining a main for App when I really wanted it to use my main. The original code(which I didn't write) had a #define IMPLEMENT_WXWIN_MAIN
at the top of the App file and as I said earlier, used IMPLEMENT_APP(App). Everything worked fine with wxWidgets 2.8.6, but when I tried to use wxWidgets 2.9.1, I started having this issue.
Solution:
Replace IMPLEMENT_APP(App)
with wxIMPLEMENT_APP_NO_MAIN(App);