Как скомпилировать Дисконтную C-библиотеку?

54
3

Я хочу использовать Дисконтную C-библиотеку для преобразования текста Markdown в HTML. Я уже успешно скомпилировал и установил библиотеку (версия 2.1.3).

Я попытался скомпилировать этот код

#include <mkdio.h>
int main(void)
{
FILE *in, *out;
MMIOT *doc;

in = fopen("sample.md", "r");
out = fopen("out.html", "w");

doc = mdk_in(in, 0);
markdown(doc, out, 0);

...
}

Объяснение: mkd_in() читает входной файл in в библиотеке рабочего типа MMIOT doc и уценки() должен преобразовать doc в HTML и записывает это в out файла.

с командой gcc -Wall -lmarkdown -o FILE FILE.c и я всегда получаю следующий вывод:

undefined reference to 'mkd_in(_IO_FILE*, unsigned int)'
undefined reference to 'markdown(void*, _IO_FILE*, unsigned int)'

Примечание. Я запустил инструмент настройки Discount с --shared для создания динамической библиотеки. По умолчанию это статическая библиотека, но с этим у меня такая же проблема.

спросил(а) 2012-04-07T13:45:00+04:00 8 лет, 2 месяца назад
1
Решение
67

Попробуйте это вместо этого:

gcc -Wall -o FILE FILE.c -lmarkdown

Размещение -l значимо в том, что многие линкеры будут использовать библиотеки только для удовлетворения нерешенных ссылок, если они существуют в то время, когда -l. Например, это может вызвать всевозможные проблемы с круговыми зависимостями.

Там, где у вас это есть, эти функции не решены, так как вы еще не скомпилировали FILE.c Когда вы компилируете FILE.c, там нет -l следующего за этой точкой, чтобы удовлетворить ссылки.

На странице gcc man:

Заказ имеет значение, если вы используете несколько вариантов одного и того же типа; например, если вы укажете -l более одного раза, поиск выполняется в указанном порядке. Кроме того, значительным является размещение опции -l.

И, позже, в -l:

Это имеет значение, когда в команде вы пишете эту опцию; компоновщик ищет и обрабатывает библиотеки и объектные файлы в том порядке, в котором они указаны. Таким образом, foo.o -l z bar.o ищет библиотеку z после файла foo.o, но до bar.o. Если bar.o ссылается на функции из z, эти функции могут не загружаться.

ответил(а) 2012-04-07T13:58:00+04:00 8 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема