Twoje obecne polecenie kompilacji:g++ demo.cpp -o demo
nie zawiera informacji dla linkera ld
do których bibliotek należy linkować. Z tego powodu pojawia się błąd linkera:
W tej dokumentacji jest napisane, które biblioteki są potrzebne.
Możesz połączyć statycznie lub dynamicznie.
Łączenie statyczne oznacza, że twój plik wykonywalny będzie działał na maszynach, które nie mają zainstalowanych wymaganych bibliotek, ponieważ biblioteki znajdują się w pliku wykonywalnym. Dzięki temu plik wykonywalny ma większy rozmiar. W przypadku MySQL Connector/C++ biblioteki to:libmysqlcppconn-static.a
i libmysqlclient.a
Dynamiczne łączenie oznacza, że twój plik wykonywalny będzie musiał znaleźć biblioteki na maszynie, na której powinien działać. Potrzebna biblioteka to:libmysqlcppconn.so
.
Twoje polecenie kompilacji z linkowaniem dynamicznym (używając libmysqlcppconn.so
) powinien wyglądać tak:
g++ demo.cpp -o demo -lmysqlcppconn
Dalej zwróć uwagę na różnicę między -l
i -L
jak wspomniano tutaj na SO
lub tutaj, w oficjalnej dokumentacji konsolidatora gcc
:
Nie potrzebujesz ścieżki (-L
) tutaj, ponieważ biblioteki powinny leżeć w /usr/local/lib
która jest domyślną instalacją i znajduje się już w ścieżce wyszukiwania linkera.