2015-03-24 3 views
1

Я пытаюсь скомпилировать простой файл C++, который предположительно использует коннектор mariadbC++. По какой-то причине я столкнулся с большими неприятностями. Я получаю странные сообщения об ошибках. Я не понимаю их и не знаю, как их исправить.
Я провел много исследований, но ни один другой не столкнулся с этими проблемами, или я просто не могу их найти.MariaDB C++ Connector compile

Я установил следующие пакеты:

mariadb-client 
mariadb-client-5.5 
mariadb-server 
libmariadbclient18 
libmysqlclient18 
libmysqlcppconn7 
libmysqlcppconn-dev 
libmariadbclient-dev 
libmariadb-dev 

Я на x64 Ubuntu 14.04 System (ну Pinguy OS, но я думаю, это не имеет значения)

Я пытался построить следующую программку :

#include <my_global.h> 
#include <mysql.h> 
#include "mysql_driver.h" 

int main(int argc, char **argv) 
{ 
    sql::mysql::MySQL_Driver *driver; 
    sql::Connection *con; 
    sql::Statement *stmt; 
    driver = sql::mysql::MySQL_Driver::get_mysql_driver_instance(); 
    con = driver->connect("tcp://localhost:3306","root", "herein"); 
    if (!con->isValid()) exit(1); 

    stmt = con->createStatement(); 
    stmt->execute("use testtb"); 

    stmt->execute("INSERT INTO Testtable(id, label) VALUES (1, 1)"); 
    delete stmt; 
    delete con; 
    return 1; 
} 

И я попробовал эту команду:

g++ -lmysqlcppconn -g src/test_mariadb.cpp -o bin/test_mariadb $(mysql_config --cflags) $(mysql_config --libs) 

где внизу в src/мои исходные файлы есть и в bin/my binaries.

И, наконец, ошибки компиляции, я получаю:

In file included from /usr/include/c++/4.8/bits/char_traits.h:39:0, 
       from /usr/include/c++/4.8/ios:40, 
       from /usr/include/c++/4.8/ostream:38, 
       from /usr/include/c++/4.8/iostream:39, 
       from /usr/include/boost/assert.hpp:82, 
       from /usr/include/boost/smart_ptr/scoped_ptr.hpp:15, 
       from /usr/include/boost/scoped_ptr.hpp:14, 
       from /usr/include/mysql_driver.h:30, 
       from src/test_mariadb.cpp:3: 
/usr/include/c++/4.8/bits/stl_algobase.h:239:56: error: macro "min" passed 3 arguments, but takes just 2 
    min(const _Tp& __a, const _Tp& __b, _Compare __comp) 
                 ^
/usr/include/c++/4.8/bits/stl_algobase.h:260:56: error: macro "max" passed 3 arguments, but takes just 2 
    max(const _Tp& __a, const _Tp& __b, _Compare __comp) 
                 ^
In file included from /usr/include/boost/mpl/aux_/begin_end_impl.hpp:21:0, 
       from /usr/include/boost/mpl/begin_end.hpp:18, 
       from /usr/include/boost/mpl/iter_fold.hpp:18, 
       from /usr/include/boost/variant/detail/initializer.hpp:28, 
       from /usr/include/boost/variant/variant.hpp:31, 
       from /usr/include/boost/variant.hpp:17, 
       from /usr/include/cppconn/connection.h:31, 
       from /usr/include/cppconn/driver.h:30, 
       from /usr/include/mysql_driver.h:32, 
       from src/test_mariadb.cpp:3: 
/usr/include/boost/mpl/aux_/has_begin.hpp:20:57: error: macro "test" passed 2 arguments, but takes just 1 
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_begin, begin, true) 
                 ^
In file included from /usr/include/boost/mpl/sequence_tag.hpp:18:0, 
       from /usr/include/boost/mpl/begin_end.hpp:19, 
       from /usr/include/boost/mpl/iter_fold.hpp:18, 
       from /usr/include/boost/variant/detail/initializer.hpp:28, 
       from /usr/include/boost/variant/variant.hpp:31, 
       from /usr/include/boost/variant.hpp:17, 
       from /usr/include/cppconn/connection.h:31, 
       from /usr/include/cppconn/driver.h:30, 
       from /usr/include/mysql_driver.h:32, 
       from src/test_mariadb.cpp:3: 
/usr/include/boost/mpl/aux_/has_tag.hpp:20:54: error: macro "test" passed 2 arguments, but takes just 1 
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_tag, tag, false) 
                ^
In file included from /usr/include/boost/mpl/aux_/O1_size_impl.hpp:20:0, 
       from /usr/include/boost/mpl/O1_size.hpp:19, 
       from /usr/include/boost/mpl/iter_fold.hpp:19, 
       from /usr/include/boost/variant/detail/initializer.hpp:28, 
       from /usr/include/boost/variant/variant.hpp:31, 
       from /usr/include/boost/variant.hpp:17, 
       from /usr/include/cppconn/connection.h:31, 
       from /usr/include/cppconn/driver.h:30, 
       from /usr/include/mysql_driver.h:32, 
       from src/test_mariadb.cpp:3: 
/usr/include/boost/mpl/aux_/has_size.hpp:20:1: error: macro "test" passed 2 arguments, but takes just 1 
BOOST_MPL_HAS_XXX_TRAIT_DEF(size) 
^ 
In file included from /usr/include/boost/mpl/apply_wrap.hpp:23:0, 
       from /usr/include/boost/mpl/bind.hpp:27, 
       from /usr/include/boost/mpl/lambda.hpp:18, 
       from /usr/include/boost/mpl/iter_fold.hpp:20, 
       from /usr/include/boost/variant/detail/initializer.hpp:28, 
       from /usr/include/boost/variant/variant.hpp:31, 
       from /usr/include/boost/variant.hpp:17, 
       from /usr/include/cppconn/connection.h:31, 
       from /usr/include/cppconn/driver.h:30, 
       from /usr/include/mysql_driver.h:32, 
       from src/test_mariadb.cpp:3: 
/usr/include/boost/mpl/aux_/has_apply.hpp:22:58: error: macro "test" passed 2 arguments, but takes just 1 
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_apply, apply, false) 
                 ^
In file included from /usr/include/boost/mpl/quote.hpp:23:0, 
       from /usr/include/boost/mpl/aux_/full_lambda.hpp:25, 
       from /usr/include/boost/mpl/lambda.hpp:22, 
       from /usr/include/boost/mpl/iter_fold.hpp:20, 
       from /usr/include/boost/variant/detail/initializer.hpp:28, 
       from /usr/include/boost/variant/variant.hpp:31, 
       from /usr/include/boost/variant.hpp:17, 
       from /usr/include/cppconn/connection.h:31, 
       from /usr/include/cppconn/driver.h:30, 
       from /usr/include/mysql_driver.h:32, 
       from src/test_mariadb.cpp:3: 
/usr/include/boost/mpl/aux_/has_type.hpp:20:55: error: macro "test" passed 2 arguments, but takes just 1 
BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(has_type, type, true) 
                ^
In file included from src/test_mariadb.cpp:1:0: 
/usr/include/c++/4.8/bits/stl_algobase.h:193:5: error: expected unqualified-id before ‘const’ 
    min(const _Tp& __a, const _Tp& __b) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:193:5: error: expected ‘)’ before ‘const’ 
/usr/include/c++/4.8/bits/stl_algobase.h:193:5: error: expected ‘)’ before ‘const’ 
/usr/include/c++/4.8/bits/stl_algobase.h:193:5: error: expected initializer before ‘const’ 
/usr/include/c++/4.8/bits/stl_algobase.h:216:5: error: expected unqualified-id before ‘const’ 
    max(const _Tp& __a, const _Tp& __b) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:216:5: error: expected ‘)’ before ‘const’ 
/usr/include/c++/4.8/bits/stl_algobase.h:216:5: error: expected ‘)’ before ‘const’ 
/usr/include/c++/4.8/bits/stl_algobase.h:216:5: error: expected initializer before ‘const’ 
In file included from /usr/include/c++/4.8/bits/char_traits.h:39:0, 
       from /usr/include/c++/4.8/ios:40, 
       from /usr/include/c++/4.8/ostream:38, 
       from /usr/include/c++/4.8/iostream:39, 
       from /usr/include/boost/assert.hpp:82, 
       from /usr/include/boost/smart_ptr/scoped_ptr.hpp:15, 
       from /usr/include/boost/scoped_ptr.hpp:14, 
       from /usr/include/mysql_driver.h:30, 
       from src/test_mariadb.cpp:3: 
/usr/include/c++/4.8/bits/stl_algobase.h:239:5: error: ‘std::min’ declared as an ‘inline’ variable 
    min(const _Tp& __a, const _Tp& __b, _Compare __comp) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:239:5: error: template declaration of ‘const _Tp& std::min’ 
/usr/include/c++/4.8/bits/stl_algobase.h:242:7: error: expected primary-expression before ‘if’ 
     if (__comp(__b, __a)) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:242:7: error: expected ‘}’ before ‘if’ 
/usr/include/c++/4.8/bits/stl_algobase.h:244:7: error: expected unqualified-id before ‘return’ 
     return __a; 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:260:5: error: ‘max’ declared as an ‘inline’ variable 
    max(const _Tp& __a, const _Tp& __b, _Compare __comp) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:260:5: error: template declaration of ‘const _Tp& max’ 
/usr/include/c++/4.8/bits/stl_algobase.h:263:7: error: expected primary-expression before ‘if’ 
     if (__comp(__a, __b)) 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:263:7: error: expected ‘}’ before ‘if’ 
/usr/include/c++/4.8/bits/stl_algobase.h:265:7: error: expected unqualified-id before ‘return’ 
     return __a; 
    ^
/usr/include/c++/4.8/bits/stl_algobase.h:266:5: error: expected declaration before ‘}’ token 
    } 

ответ

1

Заголовок вы включили имеет определенные макросы препроцессора с именем min, max и test. Затем они столкнулись с используемыми идентификаторами (например, для имен методов) в других заголовочных файлах, которые вы включили.

Предполагая, что эти макросы определены в одном из этих заголовков:

#include <my_global.h> 
#include <mysql.h> 

вы могли бы добавить #undef сек перед включением mysql_driver.h, например:

#include <my_global.h> 
#include <mysql.h> 
#undef min 
#undef max 
#undef test 
#include "mysql_driver.h" 

Вы также могли бы рассмотреть перестановку порядок, в который вы включаете файлы, или посмотрите, какие заголовки определяют их, и можно ли отключить определение этих макросов.

+0

Спасибо большое, это была проблема с включением заголовков my_global.h, mysql.h. Они перепутали cppconnector. Я просто удалил их, и все переписано просто отлично! – Poehli