2015-10-26 2 views
1

Я пытаюсь использовать библиотеку tidylib в моем приложении C. При компиляции, я получаю следующие ошибки:Ссылка библиотека tidylib на приложение C

$ make 
rm -f sbo-export 
cc sbo-export.c safarilib.c -L/usr/local/lib -lcurl -L/usr/local/Cellar/libtidy/lib -I/usr/local/Cellar/libtidy/include -o sbo-export 
Undefined symbols for architecture x86_64: 
    "_tidyCreate", referenced from: 
     _safari_init_session in safarilib-c7ab6a.o 
    "_tidyParseString", referenced from: 
     _safari_init_session in safarilib-c7ab6a.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [default] Error 1 

safarilib.c:

#include <stdio.h> 
#include <string.h> 
#include <assert.h> 
#include <tidy/tidy.h> 
#include <tidy/buffio.h> 
#include <curl/curl.h> 
#include "safarilib.h" 

void usage(char *username, char *password) 
{ 
    TidyDoc tdoc = tidyCreate(); 
    char *input = "<html><body><h1>Hello World!</h1></body></html>"; 
    tidyParseString(tdoc, input); 
} 

Любые предложения?


Другая Информация:

Для установки libtidy, я сделал следующее:

  • Скачано libtidy из http://tidy.sourceforge.net, а затем
  • следовали инструкции формируют файл tidy/build/readme.txt

Моя библиотека установлена ​​здесь:

/usr/local/Cellar/libtidy 
/usr/local/Cellar/libtidy/bin 
/usr/local/Cellar/libtidy/bin/tab2space 
/usr/local/Cellar/libtidy/bin/tidy 
/usr/local/Cellar/libtidy/include 
/usr/local/Cellar/libtidy/include/buffio.h 
/usr/local/Cellar/libtidy/include/platform.h 
/usr/local/Cellar/libtidy/include/tidy.h 
/usr/local/Cellar/libtidy/include/tidyenum.h 
/usr/local/Cellar/libtidy/lib 
/usr/local/Cellar/libtidy/lib/libtidy-0.99.0.dylib 
/usr/local/Cellar/libtidy/lib/libtidy.a 
/usr/local/Cellar/libtidy/lib/libtidy.dylib 
/usr/local/Cellar/libtidy/lib/libtidy.la 
+2

Вы не видите на самом деле * ссылку * с библиотекой. Добавить, например, '-ltidy' где-то в конце. –

+0

О человек .. Это сработало. Можете ли вы ответить на этот вопрос и указать дополнительную информацию? (Некоторые ссылки или аналогичные.) Я начинаю с нуля, и это очень важно для меня. Большое спасибо! – Benedikt

ответ

1

С опцией компилятора это посмотреть, что вы не указали tidylib.

cc sbo-export.c safarilib.c -L/usr/local/lib -lcurl -L/usr/local/Cellar/libtidy/lib -I/usr/local/Cellar/libtidy/include -o sbo-export 

Здесь нужно добавить -ltidy и, вероятно, путь по -L.

Дополнительная информация о linking.

+0

Оттолкни меня. Я пропустил следующее соглашение: «Правило в том, что если библиотека называется libsomething.a, вы даете cc аргумент -something. Например, математическая библиотека - libm.a, поэтому вы даете cc аргумент -lm. Обычная «игра» с математической библиотекой заключается в том, что она должна быть последней библиотекой в ​​командной строке ». – Benedikt

Смежные вопросы