0

ここの mySQL Web サイトの指示に従って、Ubuntu 10 を実行している ARM コンピューターで mySQL C コネクタをビルドしました。次に、ビルドされたヘッダーとライブラリを、正しいシステム リンクと共に、 および で指定されたパスにコピーしましmysql_config --cflagsmysql_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

ライブラリが正しい場所にあり、同じプラットフォームでビルドされているのに、リンカーがなぜライブラリを見つけられないのか、誰にもわかりませんか? 事前に感謝します。

編集: static フラグなしで同じコンパイル コマンドを実行すると、コンパイルは正常に動作しますが、実行時に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 に答える