我已经在运行Ubuntu 10的ARM计算机上按照mySQL网站here上的说明构建了mySQL C Connector。然后我使用正确的系统链接将构建的头文件和库复制到指定的路径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
有没有人知道为什么我的链接器在正确的位置并且在同一平台上构建时无法找到它?先谢谢。
编辑:当我运行没有静态标志的相同编译命令时,complile工作正常,但是,在运行时我得到error while loading shared libraries: libmysql.so.16: cannot open shared object file: No such file or directory
有谁知道为什么会出现这种情况?
答案 0 :(得分:1)
您正在静态链接libmysql.a
,但您没有这样的库。
带有后缀.so
的库是动态库,带有后缀.a
的库是静态库。
如果您为动态库创建了类似的符号链接,它可能会起作用:
ln -s libmysqlclient.a /usr/local/lib/libmysql.a