0

我已经按照 mySQL 网站上的说明在运行 Ubuntu 10 的 ARM 计算机上构建了 mySQL C 连接器然后,我将构建的头文件和库以及正确的系统链接复制到由mysql_config --cflags和指定的路径mysql_config --libs。所以,我有以下输出my_sql_config --cflags --libs

-I/usr/local/include
-L/usr/local/lib -lmysql -lpthread

和以下目录树:

/usr/local/include:
atomic        hash.h      my_aes.h        my_base.h      my_dbug.h     my_list.h                my_pthread.h     my_trie.h     mysql.h          mysys               sha2.h             t_ctype.h    waiting_threads.h
base64.h      keycache.h  my_alarm.h      my_bit.h       my_dir.h      my_md5.h         my_stacktrace.h  my_uctype.h   mysql_com.h      mysys_err.h         sql_common.h       thr_alarm.h  wqueue.h
config-win.h  lf.h        my_alloc.h      my_bitmap.h    my_getopt.h   my_net.h         my_sys.h         my_vle.h      mysql_time.h     queues.h            sslopt-case.h      thr_lock.h
decimal.h     m_ctype.h   my_atomic.h     my_charsets.h  my_global.h   my_no_pthread.h  my_time.h        my_xml.h      mysql_version.h  service_versions.h  sslopt-longopts.h  typelib.h
errmsg.h      m_string.h  my_attribute.h  my_config.h    my_libwrap.h  my_nosys.h       my_tree.h        myisampack.h  mysqld_error.h   sha1.h              sslopt-vars.h      violite.h

/usr/local/lib:
drwxr-xr-x  3 root root     4096 Oct 21 10:19 .
drwxr-xr-x 11 root root     4096 Oct 21 09:38 ..
lrwxrwxrwx  1 root root       14 Oct 21 10:12 libmysql.so -> libmysql.so.16
lrwxrwxrwx  1 root root       18 Oct 21 10:11 libmysql.so.16 -> libmysql.so.16.0.0
-rw-r--r--  1 root root  2156350 Oct 21 09:56 libmysql.so.16.0.0
-rw-r--r--  1 root root  2539588 Oct 21 09:56 libmysqlclient.a
lrwxrwxrwx  1 root root       11 Oct 21 10:12 libmysqlclient.so -> libmysql.so
lrwxrwxrwx  1 root root       11 Oct 21 10:13 libmysqlclient_r.so -> libmysql.so

现在,当我尝试静态编译某些东西时,使用这样的东西:

gcc -static -o hello_world $(mysql_config --cflags) hello_world.c $(mysql_config --libs)

我收到如下错误消息:

/usr/bin/ld: cannot find -lmysql
collect2: ld returned 1 exit status

有人知道为什么我的链接器在正确的位置并且构建在同一平台上时找不到库吗?预先感谢。

编辑:当我在没有静态标志的情况下运行相同的编译命令时,编译工作正常,但是,在运行时我得到一个error while loading shared libraries: libmysql.so.16: cannot open shared object file: No such file or directory 有谁知道为什么会这样?

4

1 回答 1

1

您正在静态链接,libmysql.a但您没有这样的库可用。

带后缀.so的库是动态库,带后缀.a的库是静态库。

如果您为动态库创建类似的符号链接,它可能会起作用:

ln -s libmysqlclient.a /usr/local/lib/libmysql.a
于 2013-02-04T01:59:39.260 回答