Details
-
Bug
-
Status: Open (View Workflow)
-
Minor
-
Resolution: Unresolved
-
None
-
None
-
None
-
None
-
windows10 64 bit
Description
try to build connect a simple program with c++ connector and it fails.
(linker is missing some component).
// Includes
|
#include <iostream>
|
#include <mariadb/conncpp.hpp>
|
|
void updateContact(std::shared_ptr<sql::PreparedStatement> &stmnt, |
sql::SQLString first_name,
|
sql::SQLString email)
|
{
|
try |
{
|
// Bind variables to prepared statement parameters |
// Note that the index starts at 1--not 0 |
stmnt->setString(1, email);
|
stmnt->setString(2, first_name);
|
|
// Execute Statement |
stmnt->executeUpdate();
|
}
|
|
// Catch Exception |
catch (sql::SQLException &e) |
{
|
std::cerr << "Error updating contact: " |
<< e.what() << std::endl;
|
}
|
}
|
|
// Main Process
|
int main(int argc, char **argv) |
{
|
try |
{
|
// Instantiate Driver |
sql::Driver* driver = sql::mariadb::get_driver_instance();
|
|
// Configure Connection |
// The URL or TCP connection string format is |
// ``jdbc:mariadb://host:port/database``. |
sql::SQLString url("jdbc:mariadb://192.0.2.1:3306/test"); |
|
// Use a properties map for the user name and password |
sql::Properties properties({
|
{"user", "db_user"}, |
{"password", "db_user_password"} |
});
|
|
// Establish Connection |
// Use a smart pointer for extra safety |
std::unique_ptr<sql::Connection> conn(driver->connect(url, properties));
|
|
// Use Connection to update contacts with a transaction |
try |
{
|
// Disabling ``auto-commit`` mode automatically starts a new user managed transaction. |
conn->setAutoCommit(false); |
|
// Create a PreparedStatement |
// Use a smart pointer for extra safety |
std::shared_ptr<sql::PreparedStatement> stmnt(conn->prepareStatement(
|
"UPDATE test.contacts SET email=? WHERE first_name = ?" |
)
|
);
|
|
std::string contacts[3][2] = {
|
{ "John", "johnsmith@example.com" }, |
{ "Jon", "jonsmith@example.com" }, |
{ "Johnny", "johnnysmith@example.com" } |
};
|
|
for (int row { 0 }; row < 3; ++row) { |
updateContact(stmnt, contacts[row][0], contacts[row][1]);
|
}
|
|
// Commit the transaction |
conn->commit();
|
}
|
catch (sql::SQLException &e) |
{
|
std::cerr << "Error updating contact with a transaction: " |
<< e.what() << std::endl;
|
|
// Rollback the transaction |
conn->rollback();
|
}
|
|
// Close Connection |
conn->close();
|
}
|
catch (sql::SQLException &e) |
{
|
std::cerr << "SQL exception in MariaDB Platform: " |
<< e.what() << std::endl;
|
|
// Exit (Failed) |
return 1; |
}
|
|
// Exit (Success) |
return 0; |
}
|
-------------- Build: Debug in testmariadb__1 (compiler: GNU GCC Compiler)---------------
|
|
g++.exe -Wall -fexceptions -std=c++11 -g -I"C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include" -I"C:\Program Files\MariaDB\MariaDB Connector C 64-bit\include" -I"C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib" -I"C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit" -c C:\SOFTWARE__MYSQL__MARIADBPP\test__mariadb__2.cpp -o obj\Debug\test__mariadb__2.o
|
g++.exe -L"C:\Program Files\MariaDB\MariaDB Connector C 64-bit\lib" -L"C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit" -o bin\Debug\testmariadb__1.exe obj\Debug\test__mariadb__2.o -static ..\..\openssl-1.1.1a-win64-mingw\lib\libcrypto.a ..\..\openssl-1.1.1a-win64-mingw\lib\libssl.a "..\..\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\libmariadb.dll" "..\..\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\libmariadb.lib" "..\..\Program Files\MariaDB\MariaDB Connector C 64-bit\lib\mariadbclient.lib" "..\..\Program Files\MariaDB\MariaDB C++ Connector 64-bit\mariadbcpp.lib" "..\..\Program Files\MariaDB\MariaDB C++ Connector 64-bit\mariadbcpp.dll"
|
In file included from C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp/Driver.hpp:25,
|
from C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp.hpp:24,
|
from C:\SOFTWARE__MYSQL__MARIADBPP\test__mariadb__2.cpp:6:
|
C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp/SQLString.hpp:32: warning: ignoring #pragma warning [-Wunknown-pragmas]
|
#pragma warning(push)
|
|
C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp/SQLString.hpp:33: warning: ignoring #pragma warning [-Wunknown-pragmas]
|
#pragma warning(disable:4251)
|
|
In file included from C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp/Driver.hpp:25,
|
from C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp.hpp:24,
|
from C:\SOFTWARE__MYSQL__MARIADBPP\test__mariadb__2.cpp:6:
|
C:\Program Files\MariaDB\MariaDB C++ Connector 64-bit\include/mariadb/conncpp/SQLString.hpp:111: warning: ignoring #pragma warning [-Wunknown-pragmas]
|
#pragma warning(pop)
|
|
obj\Debug\test__mariadb__2.o: In function `main':
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:37: undefined reference to `__imp__ZN3sql7mariadb19get_driver_instanceEv'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:42: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:65: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:65: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:74: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:74: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:42: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:48: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
obj\Debug\test__mariadb__2.o:C:/SOFTWARE__MYSQL__MARIADBPP/test__mariadb__2.cpp:74: more undefined references to `__imp__ZN3sql9SQLStringD1Ev' follow
|
obj\Debug\test__mariadb__2.o: In function `sql::SQLString::SQLString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
|
C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/mariadb/conncpp/SQLString.hpp:43: undefined reference to `__imp__ZN3sql9SQLStringC1EPKcy'
|
obj\Debug\test__mariadb__2.o: In function `std::pair<sql::SQLString const, sql::SQLString>::~pair()':
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:198: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:198: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
obj\Debug\test__mariadb__2.o: In function `std::pair<sql::SQLString const, sql::SQLString>::pair<char const (&) [5], char const (&) [8], true>(char const (&) [5], char const (&) [8])':
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
obj\Debug\test__mariadb__2.o: In function `std::pair<sql::SQLString const, sql::SQLString>::pair<char const (&) [9], char const (&) [17], true>(char const (&) [9], char const (&) [17])':
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringC1EPKc'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:331: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
obj\Debug\test__mariadb__2.o: In function `std::less<sql::SQLString>::operator()(sql::SQLString const&, sql::SQLString const&) const':
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_function.h:386: undefined reference to `__imp__ZNK3sql9SQLStringltERKS0_'
|
obj\Debug\test__mariadb__2.o: In function `std::pair<sql::SQLString const, sql::SQLString>::pair(std::pair<sql::SQLString const, sql::SQLString> const&)':
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:292: undefined reference to `__imp__ZN3sql9SQLStringC1ERKS0_'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:292: undefined reference to `__imp__ZN3sql9SQLStringC1ERKS0_'
|
C:/Program Files/CodeBlocks/MinGW/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/bits/stl_pair.h:292: undefined reference to `__imp__ZN3sql9SQLStringD1Ev'
|
collect2.exe: error: ld returned 1 exit status
|
Process terminated with status 1 (0 minute(s), 16 second(s))
|
23 error(s), 3 warning(s) (0 minute(s), 16 second(s))
|
|
Thank you for your report. Technically we do not support mingw, thus I've put priority to Minor.
The error is that the linker can't find symbols from c/c++ actually. I am actually not sure, but maybe you should try to build c/c++ from source to use in mingw.
On a side note, our windows binaried does not have dependency on openssl, so you don't need to link it.