2012-10-09 96 views
1

我开始尝试使用今天编写的MySQL C API,我今天从我的10.6.8 macbook上从源代码编译,并推出了一个快速生成文件+应用程序框架。不过,我感觉有点生疏,因为我似乎无法正确链接(现在看起来固定)或动态加载库(下面说明问题)。dyld:Library未加载:libmysql.16.dylib(MAC)

我收到确切的错误是下面:

$ 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结果的走了过来。然而,在阅读其中的一些内容之后,我仍然不完全明白这实际上做了什么。有很多关于Frameworks的讨论,这并不适合我期望参与这样一个简单的项目。

无论如何,这里是我的代码(包括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(); 

的Makefile

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

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

$ export DYLD_LIBRARY_PATH="${DYLD_LIBRARY_PATH}:/usr/local/mysql/lib" 
$ ./adapter 
相关问题