programing

MariaDBC++ 커넥터 컴파일

kingscode 2023. 8. 29. 21:33
반응형

MariaDBC++ 커넥터 컴파일

mariadbc++ 커넥터를 사용해야 하는 간단한 c++ 파일을 컴파일하려고 합니다.어떤 이유에서인지 저는 그것 때문에 많은 문제에 부딪혔습니다.이상한 오류 메시지가 표시됩니다.저는 그들을 이해하지도 못하고, 어떻게 고쳐야 할지도 모릅니다.
저는 많은 조사를 했지만 아무도 이런 문제에 부딪히지 않았거나 찾을 수 없었습니다.

다음 패키지를 설치했습니다.

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

저는 x64 Ubuntu 14.04 시스템(글쎄요, 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/mysource 파일은 및 bin/mysinary 파일입니다.

마지막으로 컴파일 오류가 표시됩니다.

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
     }

포함한 헤더에는 이름이 정의된 전처리기 매크로가 있습니다.min,max그리고.test그런 다음 포함된 다른 헤더 파일에 사용된 식별자(예: 메서드 이름)와 충돌합니다.

이러한 매크로가 다음 헤더 중 하나에 정의되었다고 가정합니다.

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

추가할 수 있습니다.#undef포함하기 전의 smysql_driver.h예:

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

또한 파일을 포함하는 순서를 다시 정렬하거나, 파일을 정의하는 헤더를 조사하여 이러한 매크로의 정의를 사용하지 않도록 설정할 수 있는지 여부를 확인할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/29239364/mariadb-c-connector-compile

반응형