今日、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 固有の問題であるという直感がありますが、実際には何が問題なのかわかりません。