Você deve colocar a biblioteca mais independente no final do comando, para que o compilador possa encontrar o símbolo e as definições corretamente:
c++ -L/usr/lib/x86_64-linux-gnu -o tom tom.o Block.o IPC.o \
ConnectMxctl.o CI_Metadata.o Log.o \
-lmysqlclient -lpthread -lz -lm -lrt -ldl
Ao fazer isso, o compilador continuará pesquisando símbolos indefinidos dos próximos arquivos de vinculação. Por exemplo, se
IPO.o
usa o símbolo (tipo/classe/estrutura/função etc) definido em CI_Metadata.o
, o compilador pode encontrá-lo porque você colocou CI_Metadata.o
após IPO.o
. A maioria das bibliotecas são independentes, por isso estão no final do comando compile/link.