programing

C++ 및 g++을 사용하여 mysql.h에서 출력을 가져오는 동안 오류가 발생했습니다.

javamemo 2023. 9. 2. 07:55
반응형

C++ 및 g++을 사용하여 mysql.h에서 출력을 가져오는 동안 오류가 발생했습니다.

MySQL 데이터베이스에 연결할 수 있는 작은 코드가 있습니다. 코드는 다음과 같습니다.

#include <iostream>
#include <mariadb/mysql.h> // /usr/includes/mariadb/mysql.h

struct connection_details
{
    const char *server, *user, *password, *database;
};

MYSQL* mysql_connection_setup(struct connection_details mysql_details){
    MYSQL *connection = mysql_init(NULL); // mysql instance
    
    //connect database
    if(!mysql_real_connect(connection, mysql_details.server, mysql_details.user, mysql_details.password, mysql_details.database, 0, NULL, 0)){
        std::cout << "Connection Error: " << mysql_error(connection) << std::endl;
        exit(1); 
    }

    return connection;
}

// mysql_res = mysql result
MYSQL_RES* mysql_perform_query(MYSQL *connection, const char *sql_query){
    //send query to db
    if(mysql_query(connection, sql_query)){
        std::cout << "MySQL Query Error: " << mysql_error(connection) << std::endl;
        exit(1);
    }

    return mysql_use_result(connection);
}

int main(int argc, char const *argv[])
{
    MYSQL *con; // the connection
    MYSQL_RES *res; // the results
    MYSQL_ROW row;  // the results row (line by line)

    struct connection_details mysqlD;
    mysqlD.server = "localhost";  // where the mysql database is
    mysqlD.user = "netser";     // the root user of mysql   
    mysqlD.password = "root"; // the password of the root user in mysql
    mysqlD.database = "mydatabase"; // the databse to pick

    // connect to the mysql database
    con = mysql_connection_setup(mysqlD);

    // assign the results return to the MYSQL_RES pointer
    res = mysql_perform_query(con, "show tables");

    std::cout << ("MySQL Tables in mysql database:") << std::endl;
    while ((row = mysql_fetch_row(res)) !=NULL)
        std::cout << row[0] << std::endl;

    /* clean up the database result set */
    mysql_free_result(res);
    /* clean up the database link */
    mysql_close(con);

    return 0;
} 

다음을 사용하여 컴파일하려고 할 때:

g++ connectdb.cpp -o output && ./output

다음 몇 가지 오류가 발생합니다.

/usr/bin/ld: /tmp/ccDwpmw3.o: in function `mysql_connection_setup(connection_details)':
connectdb.cpp:(.text+0xf): undefined reference to `mysql_init'
/usr/bin/ld: connectdb.cpp:(.text+0x3c): undefined reference to `mysql_real_connect'
/usr/bin/ld: connectdb.cpp:(.text+0x6c): undefined reference to `mysql_error'
/usr/bin/ld: /tmp/ccDwpmw3.o: in function `mysql_perform_query(st_mysql*, char const*)':
connectdb.cpp:(.text+0xc4): undefined reference to `mysql_query'
/usr/bin/ld: connectdb.cpp:(.text+0xef): undefined reference to `mysql_error'
/usr/bin/ld: connectdb.cpp:(.text+0x125): undefined reference to `mysql_use_result'
/usr/bin/ld: /tmp/ccDwpmw3.o: in function `main':
connectdb.cpp:(.text+0x1ca): undefined reference to `mysql_fetch_row'
/usr/bin/ld: connectdb.cpp:(.text+0x213): undefined reference to `mysql_free_result'
/usr/bin/ld: connectdb.cpp:(.text+0x21f): undefined reference to `mysql_close'

{그런데, 저는 Mariadb와 함께 Parot OS를 사용하고 VSCode}을(를) 사용합니다.

전에 C++의 데이터베이스를 사용해 본 적이 없기 때문에 무엇이 문제가 될 수 있는지 거의 알 수 없지만 데이터베이스가 종료되고 mysql.h에 대한 연결에는 문제가 없습니다.

문제는 내가 어떻게 실행하느냐에 있었고, 나는 그것을 사용해야 했습니다.

g++ connectdb.cpp -o output -L/usr/include/mariadb/mysql -lmariadbclient

그리고 아닙니다.

g++ connectdb.cpp -o output

다음은 같은 문제를 가진 미래의 사람들을 위한 분류입니다.

g++ connectdb.cpp -o 출력(일반 컴파일)

-L/usr/include/mariadb/mysql(사용 중인 OS와 mariadb를 사용하는 경우에는 -L/usr/include/mysql과 같은 것으로 변경해야 할 수도 있습니다. mariadb를 사용하고 여전히 문제가 있는 경우에는 libmariadb-dev를 설치해야 합니다.)

-lmariadb 클라이언트(mariadb 설치를 적절하게 수행해야 합니다...MySQL을 사용하는 경우 -lmysqlclient를 대신 사용합니다.)

언급URL : https://stackoverflow.com/questions/64755708/error-getting-output-from-mysql-h-using-c-and-g

반응형