2010-10-08 18 views
9

Próbuję dodać SQLite do mojego projektu przez DLL.Jak dołączyć bibliotekę DLL SQLite do mojego projektu C++?

Pobrałem SQLiteDLL-3 z download page, wyodrębniłem jego zawartość (bibliotekę DLL i plik .h) i uruchomiłem na niej lib.exe, aby utworzyć plik .lib. Następnie ustawiam katalog zawierający pliki .lib i .dll jako Katalog dodatkowej biblioteki, w ustawieniach projektu, pod Linker >> Ogólne.

Następnie pobrałem SQLiteSource-3 ze strony pobierania i wyodrębniłem plik SQLite3.h do katalogu z plikami .Lib i .DLL, i dodałem ten katalog jako katalog Dodatkowy katalog w C/C++ >> Ogólne . Dodałem #include do mojego głównego pliku, a następnie dodałem sqlite3.dll jako dodatkową zależność w Linker >> Input.

Zasadniczo następnie this, ale kiedy go uruchomić, dostaję błąd mówiąc:

fatal error LNK1107: invalid or corrupt file: cannot read at 0x2B8 

Próbowałem wiele rzeczy do poprawienia, w tym budowę plik .lib zarówno pod x86 i x64, i włączając pełną ścieżkę do pliku .lib na liście Dodatkowych zależności. To zawsze ten błąd, który dostaję. Wygląda na to, że przynajmniej znalazłem plik .h, ponieważ jeśli pomieszam z nazwą w załączeniu, otrzymuję komunikat "nie mogę znaleźć pliku", więc ta część wydaje się być poprawna.

Czy ktoś może zobaczyć, co robię nieprawidłowo i jak rozwiązać problem?

Aktualizacja: Naprawiono „nieprawidłowy lub uszkodzony plik” problem dodając plik .lib do listy Dodatkowe Dependies, w przeciwieństwie do pliku .dll. Teraz dostaję nierozwiązane błędy łącznikowe:

błąd LNK2019: nierozwiązanych zewnętrznych symbolu _sqlite3_exec mowa w funkcji _MAIN

błędu LNK2019: nierozwiązanych zewnętrznych symbolu _sqlite3_open mowa w funkcji _MAIN

błąd krytyczny LNK1120: 2 nierozwiązanych zewnętrznymi

+6

dodać plik .lib jako wejście łącznika, a nie pliku .dll. – Blindy

+1

To wyczyściło ten błąd. Dziękuję Ci. Teraz otrzymuję nierozwiązane zewnętrzne błędy linkera symbolu dla każdego wywołania funkcji SQLite. Funkcje pojawiają się w intellisense, jeśli to wszystko ma znaczenie. –

+0

Co to jest jeden z brakujących symboli? (Należy powiedzieć w błędzie) – dgnorton

Odpowiedz

1

Jeśli dobrze pamiętam SQLite jest napisany w C. Czy plik sqlite3.h mieć

extern "C" {} 

zawijanie deklaracji? Być może masz problemy z numerem name mangling.

+0

Rzeczywiście. Wszelkie sugestie dotyczące rozwiązania? –

+0

Po uruchomieniu programu plik dll musi znajdować się w tym samym katalogu co plik wykonywalny lub w katalogu windows. (Plik lib nie) – Jay

+0

Problemy z kompilacją: myślę, że używasz netbeans jako IDE? Włożyłeś katalog, w którym można znaleźć plik lib, ale nie powiedziałeś, że projekt ma zawierać tę konkretną bibliotekę. W obszarze Łącznik >> Ogólne >> Biblioteki >> Dodaj plik biblioteki, a następnie wybierz plik sqlite3.lib. – Jay

11

Oto co pracował dla mnie:

W programie Visual Studio 2010, kliknij "Narzędzia Prompt VS Command"

W oknie wiersza poleceń wpisz na przykład:

lib /DEF:"C:\SQLite\sqlite3.def" /OUT:"C:\SQLite\sqlite3.lib" 

W oknie Solution Explorer kliknij projekt prawym przyciskiem myszy, dodaj plik "sqlite3.lib".

(Można by pomyśleć, gang SQLite mogą obejmować .lib w download?)

+0

Jak to zrobić w Visual Studio 2012? Daje mi błąd "Polecenie" lib "nie jest poprawne." – satur9nine

+0

To naprawia dla mnie komunikat "nierozwiązany zewnętrzny", a aplikacja działa ... i natychmiast się zawiesza. 'Nie można aktywować aplikacji Sklep Windows .... Proces ... rozpoczął się, ale żądanie aktywacji nie powiodło się z powodu błędu" Aplikacja nie została uruchomiona "." – McGarnagle

+0

Mój błąd - odpowiedź tutaj działa również dla mnie (moja powyższa komentarz wynika z tego, że budowałem x86 dla projektu x64, jak głupiec). – McGarnagle

Powiązane problemy