C++ Builder mysql - problem

0

Witam,
Napisałem kiedyś pewien program bazujący a plikach tekstowych, teraz chciałbym przerobić dostęp z plików na obsługę bazy danych, jednak w tym momencie poległem... Dokładniej mówiąc nie udało mi się wykonać załadowania bibliotek przez co otrzymuje błędy w stylu:

 [ILINK32 Error] Error: Unresolved external 'mysql_init' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_real_connect' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_query' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_store_result' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_num_fields' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_fetch_row' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ
[ILINK32 Error] Error: Unresolved external 'mysql_free_result' referenced from D:\STUDIA\SEMESTR III\C++\PROJEKT NA ZERO\PROJEKT OSTATECZNY\DEBUG\UNIT3.OBJ

Przeszukałem wiele linków z podobnym problemem ale rozwiązania nie znalazłem...
Mam potrzebne pliki w folderze projektu.
Biblioteka libmysql.lib jest dołączona '#pragma "mysql/libmysql.lib"'
Już naprawdę brak mi sił i pomysłów. Mam cichą nadzieje że ktoś pomoże mi w rozwiązaniu tego problemu.
Pozdrawiam,
Mexis

0

ale jej nie widzi, tej biblioteki. spróbuj podać pełną ścieżkę.

0

Niestety nie pomaga... Brak mi już "dziś" pomysłów co do tego... Nawet próba połączenia z użyciem kontrolki zakończyła się fiaskiem... cały czas problem z plikami libmysql.dll lub libmysql.lib...

0

Ma ktoś może jakieś inne pomysły na rozwiązanie tego problemu?

0

Musisz załadować liba.
Jesli używasz Visual Studio to możesz to wyklikać w ustawieniach projektu w sekcji Input lub w pliku nagłówkowym dać:

#pragma comment(lib, "ścieżka_do_pliku/libmysql.lib")

W windowsie musisz chyba dodać jeszcze bibliotekę winsock.

0

Program mam w C++ Builder.
Ładowanie bibliotek itd w moim projekcie wygląda tak:

 //---------------------------------------------------------------------------
 #include "winsock.h"
#include <windows.h>

#include <vcl.h>
#pragma hdrstop

#include "Unit3.h"
#include "Unit1.h"
#include "Unit2.h"
#include <fstream.h>
#include <vector>

#include "mysql/mysql.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#pragma link "MYSQL/libmysql.lib"
TForm3 *Form3;

A więc ładowanie mam biblioteki mam przez #pragma link "MYSQL/libmysql.lib" wykonałem generowanie lib'a z dll przy pomocy implib ale niestety dalej mam błędy...
Jakieś inne pomysły?

0

Nie widzi libki i koniec...
Jeśli linkujesz bez pełnej ścieżki, musisz jeszcze mieć pewność, że IDE zna ścieżkę w której to mysql.lib będzie, przecież nie będzie przeszukiwał Ci całego dysku, zgadza się?
Ścieżki jak i samą libke na pewno da się dodać w opcjach projektu.

0

Ścieżki do bibliotek są ustawione... Szukam innego problemu... Co sądzicie na temat takiej sytuacji... Jeżeli mam System 64bitowy a kompilator 32bitowy to czy dll powinienem mieć 64 bitowy? Wg mnie tak... Ale czy na pewno?

0

Udało mi się rozwiązać problem... Dla potomnych podam link w którym znalazłem odpowiednią bibliotekę: http://vertstudios.com/blog/libmysqldll-32-bit-download/
Pozdrawiam,
Mexis

0
Mexis napisał(a):

Ścieżki do bibliotek są ustawione... Szukam innego problemu... Co sądzicie na temat takiej sytuacji... Jeżeli mam System 64bitowy a kompilator 32bitowy to czy dll powinienem mieć 64 bitowy? Wg mnie tak... Ale czy na pewno?

Jeszcze w roli ścisłości, spóźniona odpowiedź na pytanie:
Proces 32 bitowy używa tylko i wyłącznie 32 bitowych DLLek, a 64 bitowy EXEc może używać tylko 64 bitowych DLLek, proces nie może załadować DLLki "innej architektury" niż on sam (tzn mógłby ale, tylko jako plik w sensie binarnym, nie widziałby tego jako DLLki w sensie kodu do wykonania).
System też nie ma tu nic do tego, bo w windowsie 64-bitowym masz niezależne podsystemy 32 i 64 bitowe, więc możesz odpalać 32 jak i 64 bitowe programy.
Kompilator też nie ma nic do tego, bo teoretycznie 32 bitowy kompilator (w sensie uruchomionego procesu) mógłby generować 64 bitowe kod/EXEci, to kwestia algorytmu i generowanego formatu EXEca

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