Объектив-С и С - PullRequest
       25

Объектив-С и С

0 голосов
/ 24 августа 2010

Я пытаюсь использовать "libmsrp", но когда я пытаюсь скомпилировать библиотеку, у меня появляется следующая ошибка:

$ make so
gcc -ggdb -shared -Wl,-soname,libmsrp.so.0 -o libmsrp.so.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations  -lpthread
ld: unknown option: -soname
collect2: ld returned 1 exit status
make: *** [so] Error 1

Поэтому я изменяю опцию -soname на -dylib_install_name -Wl. После компиляции у меня появляется следующая ошибка:

$ make so
gcc -ggdb -shared -Wl,-dylib_install_name -Wl,libmsrp.dylib.0.0.2 -o libmsrp.dylib.0.0.2 msrp.o msrp_session.o msrp_message.o msrp_relay.o msrp_switch.o msrp_callback.o msrp_network.o msrp_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations  -lpthread <p>
Undefined symbols:<p>
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [so] Error 1

Итак, я пытаюсь скомпилировать в проекте Objective-C. Я добавляю исходные и заголовочные файлы и компилирую проект.

Я получаю следующие ошибки:

command: MSRP_LIST_FREE(sessions, sessions_lock);

msrp.c:75: error: expected ';' before 'temp'
msrp.c:75: error: 'temp' undeclared (first use in this function)
msrp.c:75: error: 'next' undeclared (first use in this function)
msrp.c:75: error: expected ';' before 'temp'
msrp.c:75: error: 'previous' undeclared (first use in this function)

Объявление:

#define MSRP_LIST_FREE(list, lock
if(!(list))
    return 0;
else {
    typeof((list)) temp = list, next = NULL;
    while(temp) {
        next = temp->next;
        MSRP_LIST_REMOVE((list), (lock), temp);
        temp = next
    }
}

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 24 августа 2010

-soname должно быть -install_name Я думаю (не -dylib_install_name). В любом случае, когда я делаю это изменение, оно корректно компилируется.

Вот что у меня в файле make:

gcc -ggdb -shared -Wl,-install_name,libmsrp.so.0 -o libmsrp.so.0.0.2 ... etc.
0 голосов
/ 24 августа 2010

Вероятно, makefile имеет дело с некоторыми определениями, которые не установлены при компиляции из исходников.Вы должны продолжать бороться с make, чтобы он компилировался;) Возможно, вам следует попробовать использовать gmake вместо make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...