簡體   English   中英

C ++ MySQL連接器庫運行時錯誤

[英]C++ MySQL connector library runtime error

我試圖在C ++中以MySQL連接器為例,然后運行它。 我找不到為什么這種方法無法運行,希望你們能幫助我。

這是終端的日志

root@servah:~/c# g++ -o mysql $(mysql_config --cflags) mysql.cpp $(mysql_config --libs)
root@servah:~/c# ./mysql
./mysql: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory
root@servah:~/c# ldd mysql
    linux-gate.so.1 (0xffffe000)
    libmysqlclient.so.16 => not found
    libz.so.1 => /usr/lib/libz.so.1 (0xb7798000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7765000)
    libnsl.so.1 => /lib/libnsl.so.1 (0xb774a000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7661000)
    libm.so.6 => /lib/libm.so.6 (0xb761f000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0xb7603000)
    libc.so.6 => /lib/libc.so.6 (0xb7478000)
    /lib/ld-linux.so.2 (0xb77ca000)
root@servah:~/c# find / -name libmysqlclient.so.16
/usr/lib/mysql/libmysqlclient.so.16
root@servah:~/c# ldd /usr/lib/mysql/libmysqlclient.so.16
    linux-gate.so.1 (0xffffe000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7636000)
    libnsl.so.1 => /lib/libnsl.so.1 (0xb761b000)
    libm.so.6 => /lib/libm.so.6 (0xb75d9000)
    libz.so.1 => /usr/lib/libz.so.1 (0xb75c3000)
    libc.so.6 => /lib/libc.so.6 (0xb7437000)
    /lib/ld-linux.so.2 (0xb7702000)

mysql_config --cflags的輸出

-I/usr/include/mysql  -g -DUNIV_LINUX -DUNIV_LINUX

mysql_config--libs的輸出

-rdynamic -L/usr/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm

最后,我的代碼

#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>

#define USER "test"
#define PASSWORD "test"
#define SERVER "localhost"
#define DATABASE "test"

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

MYSQL* mysql_connect(struct connection_details mysql_details) {
    MYSQL *connection = mysql_init(NULL);

    if (!mysql_real_connect(connection, mysql_details.server,
            mysql_details.user, mysql_details.password, mysql_details.database,
            0, NULL, 0)) {
        printf("Conection error : %s\n", mysql_error(connection));
        exit(1);
    }
    return connection;
}

MYSQL_RES* mysql_query(MYSQL *connection, char *sql_query) {
    if (mysql_query(connection, sql_query)) {
    printf("MySQL query error : %s\n", mysql_error(connection));
    exit(1);
    }
    return mysql_use_result(connection);
}

int main() {
    MYSQL *conn;          // the connection
    MYSQL_RES *res;       // the results
    MYSQL_ROW row;        // the results row (line by line)

    struct connection_details mysqlD;
    mysqlD.server = (char *) SERVER;  // where the mysql database is
    mysqlD.user = (char *) USER;          // the root user of mysql
    mysqlD.password = (char *) PASSWORD; // the password of the root user in mysql
    mysqlD.database = (char *) DATABASE;  // the databse to pick

    // connect to the mysql database
    conn = mysql_connect(mysqlD);

    // assign the results return to the MYSQL_RES pointer
    char *query = (char *) "show tables";
    res = mysql_query(conn, query);

    printf("MySQL Tables in mysql database:\n");
    while ((row = mysql_fetch_row(res)) != NULL)
        printf("%s\n", row[0]);

    /* clean up the database result set */
    mysql_free_result(res);
    /* clean up the database link */
    mysql_close(conn);
    return 0;
}

我發現問題出在

root@servah:~/c# ldconfig -v | grep mysql
ldconfig: Path `/lib' given more than once
ldconfig: Path `/usr/lib' given more than once
ldconfig: Cannot stat /usr/lib/libmysqlclient_r.so: No such file or directory
    libmysqld.so.18 -> libmysqld.so.18

完全關閉了。 解決方案

root@servah:~/c# ldconfig -n /lib 

它會重新更新所有庫並清除緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM