dyld:未加载库:libmysql.16.dylib(MAC)

时间:2012-10-09 20:50:30

标签: mysql c macos gcc makefile

我今天开始尝试使用MySQL C API,我今天在10.6.8 macbook上从源代码编译,并推出了一个快速的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的很多结果出现了。然而,在阅读了其中的一些内容之后,我仍然不完全理解这实际上是做什么的。有很多关于框架的讨论,它并没有真正符合我希望参与这样一个简单项目的内容。

无论如何,这是我的代码(包括makefile)。

的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;
}

adapter.c

#include <mysql.h>

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

adapter.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特有的问题,但实际上,我真的不确定问题是什么。

1 个答案:

答案 0 :(得分:4)

这是dynamic linker错误,与源代码无关。有很多方法可以解决它。最简单的方法是在运行/usr/local/mysql/lib之前将DYLD_LIBRARY_PATH添加到adapter。例如:

$ export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}:/usr/local/mysql/lib"
$ ./adapter