Компиляция libmms под OS X

У меня возникли проблемы с линковкой некоторых очень простых статических библиотек на C. Это библиотека libMMS 0.6.2, и программа настолько проста, насколько я мог ее сделать. libmms.a и test.c находятся в одной папке с файлами заголовков в ./libmms. Компилятор llvm-gcc-4.2 под OS X Lion.

компиляция libmms:

CFLAGS="-march=x86_64" ./configure
make

тест.с:

#include <stdio.h>
#include "libmms/mms.h"

int main(void)
{
    mms_t *mms = mms_connect(NULL, NULL, "mms://some.url.com", 128*1024);
    return 0;
}

компиляция программы:

gcc -o test test.c libmms.a

который дает мне длинный список неопределенных символов

Undefined symbols for architecture x86_64:
  "_libiconv", referenced from:
      _string_utf16 in libmms.a(mms.o)
  "_libiconv_open", referenced from:
      _mms_connect in libmms.a(mms.o)
  "_libiconv_close", referenced from:
      _mms_connect in libmms.a(mms.o)
  "_g_strdup", referenced from:
      _split_user_passwd in libmms.a(uri.o)
      _gnet_uri_new in libmms.a(uri.o)
      _gnet_uri_new_fields in libmms.a(uri.o)
      _gnet_uri_new_fields_all in libmms.a(uri.o)
      _gnet_uri_clone in libmms.a(uri.o)
      _gnet_uri_set_scheme in libmms.a(uri.o)
      _gnet_uri_set_userinfo in libmms.a(uri.o)
      ...
  "_g_free", referenced from:
      _split_user_passwd in libmms.a(uri.o)
      _gnet_uri_new in libmms.a(uri.o)
      _gnet_uri_delete in libmms.a(uri.o)
      _field_escape in libmms.a(uri.o)
      _gnet_uri_set_scheme in libmms.a(uri.o)
      _gnet_uri_set_userinfo in libmms.a(uri.o)
      _gnet_uri_set_hostname in libmms.a(uri.o)
      ...
  "_g_return_if_fail_warning", referenced from:
      _gnet_uri_new in libmms.a(uri.o)
      _gnet_uri_clone in libmms.a(uri.o)
      _gnet_uri_equal in libmms.a(uri.o)
      _gnet_uri_hash in libmms.a(uri.o)
      _gnet_uri_escape in libmms.a(uri.o)
      _gnet_uri_unescape in libmms.a(uri.o)
      _gnet_uri_get_string in libmms.a(uri.o)
      ...
  "_g_malloc0_n", referenced from:
      _gnet_uri_new in libmms.a(uri.o)
      _gnet_uri_new_fields in libmms.a(uri.o)
      _gnet_uri_new_fields_all in libmms.a(uri.o)
      _gnet_uri_clone in libmms.a(uri.o)
  "_g_strndup", referenced from:
      _gnet_uri_new in libmms.a(uri.o)
  "_g_str_hash", referenced from:
      _gnet_uri_hash in libmms.a(uri.o)
  "_g_malloc", referenced from:
      _field_escape in libmms.a(uri.o)
  "_g_string_sized_new", referenced from:
      _gnet_uri_get_string in libmms.a(uri.o)
  "_g_string_append_printf", referenced from:
      _gnet_uri_get_string in libmms.a(uri.o)
  "_g_string_append", referenced from:
      _gnet_uri_get_string in libmms.a(uri.o)
  "_g_string_free", referenced from:
      _gnet_uri_get_string in libmms.a(uri.o)
  "_g_string_insert_c", referenced from:
      _g_string_append_c_inline in libmms.a(uri.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

Я пропустил что-то простое здесь?


person Community    schedule 25.11.2011    source источник
comment
Вам вообще не нужно указывать параметр -march. llvm-gcc по умолчанию будет собираться для 64-битной архитектуры.   -  person cli_hlt    schedule 26.11.2011
comment
@cli_hit Сначала я пробовал без этой опции, но та же проблема   -  person    schedule 26.11.2011
comment
@trojanfoe Обновлено с полным сообщением об ошибке   -  person    schedule 26.11.2011
comment
Похоже, что libiconv отсутствует, и я не знаю о символах g_*; являются ли они частью libmms.a? Другими словами, есть другие библиотеки, с которыми вам нужно связать. Вы проверили документы?   -  person trojanfoe    schedule 26.11.2011
comment
Похоже, вам нужно связать libiconv и, возможно, glib.   -  person You    schedule 26.11.2011
comment
Я только что скачал исходники и не увидел никакой информации о том, какие еще библиотеки нужны; дерьмовые документы. Вам точно нужен libiconv.a, но символы g_* выглядят как часть gnome? Этого не может быть.   -  person trojanfoe    schedule 26.11.2011
comment
@trojanfoe: функции g_* действительно являются частью Glib, который является частью проекта GNOME.   -  person You    schedule 26.11.2011


Ответы (1)


Кажется, что libmms зависит как от libiconv, так и от glib, поэтому вам также нужно связать их.

person You    schedule 25.11.2011