1

今日、10.6.8 macbook のソースからコンパイルした MySQL C API の実験を開始し、簡単な makefile + app スケルトンを展開しました。ただし、適切にリンクしたり(修正されたようです)、ライブラリを動的にロードしたり(下記の問題)できないように見えるため、少し錆びているように感じます。

私が受け取る正確なエラーは以下のとおりです。

$ make clean && make
gcc -L/usr/local/mysql/lib -I/usr/local/mysql/include -lmysql -lpthread -ggdb -Wall -o adapter main.c adapter.c 

$ ./adapter
dyld: Library not loaded: libmysql.16.dylib
  Referenced from: /tmp/./adapter
  Reason: image not found
Trace/BPT trap

いろいろ調べてみると、 に関する結果がたくさんinstall_name_tool出てきました。ただし、それらのいくつかを読んだ後でも、これが実際に何をするのかを完全には理解していません。フレームワークについて多くの話がありましたが、このような単純なプロジェクトに関与することを期待していたものには実際には適合しませんでした..

とにかく、これが私のコードです(メイクファイルを含む)。

main.c :

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "adapter.h"

int main (int argc, char *argv[]) {
    printf("Version: %s\n", get_version());
    return 0;
}

アダプタ.c :

#include <mysql.h>

char *get_version () {
    return (char *)mysql_get_client_info();
}

アダプター.h :

char *get_version ();

メイクファイル:

CC = gcc
MYSQL_FLAGS = -L/usr/local/mysql/lib -I/usr/local/mysql/include -lmysql -lpthread
CFLAGS = -ggdb -Wall
OBJS = 

adapter: $(OBJS)
    $(CC) $(MYSQL_FLAGS) $(CFLAGS) -o adapter main.c adapter.c $(OBJS)

clean:
    @rm -f *~ *.o adapter
    @rm -rf *.dSYM

補足として、ファイルは実際に存在します。

$ ls /usr/local/mysql/lib
libmysql.16.0.0.dylib   libmysql.dylib      libmysqlclient.dylib
libmysql.16.dylib       libmysqlclient.a    libmysqlclient_r.dylib

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

Makefile に何か問題があるか、Mac OS X 固有の問題であるという直感がありますが、実際には何が問題なのかわかりません。

4

1 に答える 1

4

これは動的リンカーエラーであり、ソース コードとは関係ありません。それを修正する方法はたくさんあります。おそらく最も簡単なのは、を実行/usr/local/mysql/libする前に に追加することです。例えば:DYLD_LIBRARY_PATHadapter

$ export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}:/usr/local/mysql/lib"
$ ./adapter
于 2012-10-09T20:57:21.367 に答える