SOCI z MySQL w C++ - cannot find lsoci_mysql

0

Zainteresowałem się dziś biblioteką obsługującą bazę danych MyQSL w C++ o nazwie SOCI. Pracując pod Linuksem zabrałem się do kompilacji za pomocą CMake z flagą do obsługi MySQL tak jak zostało to zawarte w dokumentacji. Proces odbył się bez żadnego błędu. Dorzuciłem do wszystkiego biblioteki od mysql [libmysqlclient itd.] oraz libosci-mysql-gcc. Próbny kod sprawdzający działanie SOCI wygląda tak:

#include <iostream>
#include <soci.h>
#include <mysql/soci-mysql.h>
#include <exception>

using namespace std;
using namespace soci;

int main()
{
    try
    {
        session sql(mysql, "db=baza user=gienek password='trol'");
    }
    catch(mysql_soci_error const &e)
    {
        cerr << "mysql error: " << e.err_num_
             << " " << e.what() << endl;
    }
    catch(exception const &e)
    {
        cerr << "other error: " << e.what() << endl;
    }

    return 0;
} 

Kod próbuję skompilować za pomocą poniższego polecenia:
g++ main.cpp -lsoci_core -ldl -lsoci_mysql -lmysqlclient -I /usr/include/soci -I /usr/include/mysql -o trololo
Błąd jaki otrzymuję:

/usr/bin/ld: cannot find -lsoci_mysql
collect2: error: ld returned 1 exit status

Nie jestem w stanie stwierdzić co jest nie tak. Oczywiście widzę, że problem jest z -lsoci_mysql, jednak przetrząsnąłem trochę internetów i nie znalazłem rozwiązania.

Any ideas?

0

Gdzie masz powrzucane pliki *.so i *.a? Linker po prostu nie moze znalezc tego w standardowych sciezkach, wiec pewnie cos skopales przy instalowaniu.

  • Jesli masz system srubuntu podobny, to najprowdopodobniej nie zainstalowales jakiejs wymaganej paczki, a apt tez tego nie ogarnal.
0

Wszystkie *.a i *.so dotyczące SOCI trafiły do /usr/local/lib64.

0

Teraz mnie zaciekawiles.

Jaki masz system? Nazwa + architektura. Do tego jak to instalowales? Wszystkie te flagi do mysqla powypelniales?

Na swiezutkim (x)ubuntu 12.04, wszystko poszlo gladko, trwalo to moze z 5 minut, a ld nie czepia sie, ze czegos mu brakuje :P

0

Jeśli to jest libka *.so to spróbuj podać dokładną ścieżkę do niej podczas kompilacji za pomocą opcji -rpath.

0

Ok dałem radę. Problem był w złej ścieżce do libki mysql podczas kompilacji SOCI. Re-kompilacja załatwiła sprawę. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1