Powinieneś umieścić większość niezależnych bibliotek na końcu polecenia, aby kompilator mógł poprawnie znaleźć symbole i definicje:
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
Robiąc to w ten sposób, kompilator będzie kontynuował wyszukiwanie niezdefiniowanych symboli z następnych plików łączących. Na przykład, jeśli IPO.o
używa symbolu (typ/klasa/struktura/funkcja itp.) zdefiniowany w CI_Metadata.o
, kompilator może go znaleźć, ponieważ umieściłeś CI_Metadata.o
po IPO.o
. Większość bibliotek jest niezależnych, dlatego znajdują się na końcu polecenia kompilacji/łączenia.