marcin107 Temat założony przez niniejszego użytkownika |
[MySQL Connector]Compile error » 2012-07-31 18:13:10 Witam, kiedy próbowałem skompilować ten kod mam kilka błędów.
#include <stdlib.h> #include <iostream> #include "StdAfx.h"
#include "mysql_connection.h"
#include <cppconn/driver.h> #include <cppconn/exception.h> #include <cppconn/resultset.h> #include <cppconn/statement.h>
using namespace std;
int main( void ) { cout << endl; cout << "Running 'SELECT 'Hello World!' » AS _message'..." << endl; try { sql::Driver * driver; sql::Connection * con; sql::Statement * stmt; sql::ResultSet * res; driver = get_driver_instance(); con = driver->connect( "tcp://127.0.0.1:3306", "root", "root" ); con->setSchema( "test" ); stmt = con->createStatement(); res = stmt->executeQuery( "SELECT 'Hello World!' AS _message" ); while( res->next() ) { cout << "\t... MySQL replies: "; cout << res->getString( "_message" ) << endl; cout << "\t... MySQL says it again: "; cout << res->getString( 1 ) << endl; } delete res; delete stmt; delete con; } catch( sql::SQLException & e ) { cout << "# ERR: SQLException in " << __FILE__; cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl; cout << "# ERR: " << e.what(); cout << " (MySQL error code: " << e.getErrorCode(); cout << ", SQLState: " << e.getSQLState() << " )" << endl; } cout << endl; return EXIT_SUCCESS; }
1>------ Build started: Project: new2, Configuration: Release Win32 ------ 1>new2.obj : error LNK2011: precompiled object not linked in; image may not run 1>new2.obj : error LNK2001: unresolved external symbol _get_driver_instance 1>C:\Users\xxx\Desktop\programowanie\new2\Release\new2.exe : fatal error LNK1120: 2 unresolved externals ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Proszę was o pomoc. |
|
xevuel |
» 2012-07-31 18:17:07 |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-07-31 18:21:18 Niestety, ale w linker --> Input --> Additional Dependencies posiadam dopisane 3 linijki: mysqlcppconn-static.lib, libmysql.lib, mysqlcppconn.lib, oczywiście po każdym .lib nie ma przecinka, jest tylko enter.
|
|
xevuel |
» 2012-07-31 18:22:19 Cytat z http://dev.mysql.com/doc/refman/5.1/en/ccpp-news-1-1-0.html: get_driver_instance() is now only available in dynamic library builds - static builds do not have this symbol. This was done to accommodate loading the DLL with LoadLibrary or dlopen. If you do not use CMake for building the source code you will need to define mysqlcppconn_EXPORTS if you are loading dynamically and want to use the get_driver_instance() entry point. |
Używasz DLL-ek z programem, czy nie? //edit: @DejaVu: Ale według tego stwierdzenia: get_driver_instance() is now only available in dynamic library builds - static builds do not have this symbol. |
uznaję, że po prostu biblioteki, które są linkowane statycznie nie mają w sobie tej funkcji. Mimo wszystko trzeba jakiegoś liba dolinkować. |
Wiadomo, że w większości przypadków do używania DLL'ek też trzeba dolinkować liba, ale nie zawiera on wtedy funkcji, a tylko miejsca, gdzie są umieszczone w DLL'ce. Pewnie po prostu twórcy stworzyli dwa różne buildy dla dwóch typów linkowania biblioteki :) |
|
DejaVu |
» 2012-07-31 18:25:46 @up: dll-ki nie mają nic do rzeczy. Mimo wszystko trzeba jakiegoś liba dolinkować. DLL-ka będzie musiała leżeć koło exe ale dopiero po tym jak uda mu się to skompilować. Na chwilę obecną jest ona zbędna. |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-07-31 18:32:21 Może jakiś błąd przy instalacji? Pobrałem wersję bin, z której po prostu się instalowało i stosowałem się do tego http://dev.mysql.com/doc/refman/5.5/en/connector-cpp-apps-windows-visual-studio.html. A wg tego http://dev.mysql.com/doc/refman/5.5/en/connector-cpp-installation-binary.html "Your application should use the same linker configuration as MySQL Connector/C++, for example use one of /MD, /MDd, /MT, or /MTd." - O co z tym w ogóle chodzi?
A może ktoś skusi się na pisanie kursów, poradników do MySQL Connectora? |
|
DejaVu |
» 2012-07-31 21:48:56 Nie ma sensu pisać kursów do MySQL Connector-a dla C++, ponieważ to jest jeden wieli bug. Lepiej używać API napisanego w C, które działa (w przeciwieństwie do tego w C++). |
|
marcin107 Temat założony przez niniejszego użytkownika |
» 2012-07-31 22:47:54 Bardzo różni się C od C++? To może się pobawię w konsoli z tym wszystkim. |
|
« 1 » |