现在的位置: 首页 > 综合 > 正文

error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such

2013年01月08日 ⁄ 综合 ⁄ 共 2594字 ⁄ 字号 评论关闭

今天写了个简单的mysql程序,通过C语言。

示例代码

View Code

复制代码
#include "stdio.h"
#include "mysql.h"
#include <pthread.h>
#include "stdlib.h"
#include "string"
#include "iostream"

usingnamespace std;

typedef struct SqlInfo
{
    string server;
    string user;
    string passwd;
    string db;
}SqlInfo;

void* showdatabase(void* arg)
{
     SqlInfo *p = (SqlInfo*)arg;
    
    MYSQL *mysql_test;
    MYSQL_RES *ret;
    MYSQL_ROW row;
    
    // char *server = "localhost";
    // char *user = "root";
    // char *passwd = "1234"; //伪密码
    // char *db = "mysql";
    
    mysql_test = mysql_init(NULL);
    if (!mysql_real_connect(mysql_test, p->server.c_str(), p->user.c_str(), p->passwd.c_str(), p->db.c_str(), 0, NULL, 0))
    {
        fprintf(stderr, "%s\n", mysql_error(mysql_test));
        return NULL;
    }
    
    if (mysql_query(mysql_test, "show databases"))
    {
        fprintf(stderr, "%s\n", mysql_error(mysql_test));
        return NULL;
    }
    ret = mysql_use_result(mysql_test);
    
    printf("Show Databases:\n");
    // while((row = mysql_fetch_row(ret)) != NULL)
    // {
         // printf("%s\n", row[0]);
    // }
    
    //equal to the below
    unsigned int num_fields;
    unsigned int i;

    num_fields = mysql_num_fields(ret);
    while ((row = mysql_fetch_row(ret)))
    {
        unsigned long*lengths;
        lengths = mysql_fetch_lengths(ret);
        for(i =0; i < num_fields; i++)
        {
           printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }
    
    mysql_free_result(ret);
    mysql_close(mysql_test);
} 

int main(int argc, char* argv[])
{
    if (argc <5)
    {
        cout <<"Usage: app server user passwd db"<< endl;
        return-1;
    }
    
    SqlInfo my_info;
    my_info.server = argv[1];
    my_info.user = argv[2];
    my_info.passwd = argv[3];
    my_info.db = argv[4];
        
    pthread_t thread1;
    
    pthread_create(&thread1, NULL, showdatabase, (void*)&my_info);
    pthread_join(thread1,NULL);

    return0;
}
复制代码

1、遇到的问题

1)error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory

再网上下载了一个so文件。

//locate libmysqlclient.so.16

复制文件到路径:

    /usr/local/mysql/lib/mysql/libmysqlclient.so.16

修改文件:

    vi /etc/ld.so.conf

    增加一行 /usr/local/mysql/lib/mysql

然后执行ldconfig生效。

2、关于C语言中调用mysql API

gcc -o showdata $(mysql_config --cflags) showdata.cpp  $(mysql_config --libs)

    mysql_config为MySQL中一个特殊的脚本,为编译MySQL客户端,并连接到MySQL服务器提供有用的信息。【3

    当然也要吧在makefile中指定如上选项,或

INC+=-I/usr/include/mysql
LIB=-lmysqlclient -lpthread -lssl

附:

mysql的安装:【45

要注意的一点是,安装的mysql版本要与操作系统版本匹配。

安装完后,通过以下命令设置密码:

/usr/bin/mysqladmin -u root password 'new-password'

/usr/bin/mysqladmin -u root -h love password 'new-password'

Alternatively you can run:

/usr/bin/mysql_secure_installation


You can start the MySQL daemon with:
rcmysql start
You can test the MySQL daemon with mysql-test package

参考

1
http://download.csdn.net/source/3528499

2
http://blog.sina.com.cn/s/blog_4ab24dd50100wnkv.html

3
http://blog.sina.com.cn/s/blog_59d470310100i16r.html

4
http://www.iteye.com/topic/647152

5
http://www.mysql.com/downloads/mysql/#downloads

【6】 http://wenku.baidu.com/view/5e093ddc5022aaea998f0fbc.html

抱歉!评论已关闭.