2014-11-01 3 views
1

Я работаю над проектом, который использует библиотеку скидок. http://www.pell.portland.or.us/~orc/Code/discount/ я установил библиотеку на моей машине и включил:Ошибка ссылки библиотеки скидок с Qt

#include <mkdio.h> 

и у меня есть этот кусок кода:

MMIOT* document = 0; 
char* result; 
QString sourceMarkdown(markdown); 
if (!sourceMarkdown.endsWith('\n')) 
    sourceMarkdown.append('\n'); 
QByteArray data = sourceMarkdown.toUtf8(); 
document = mkd_string(data,data.length(),MKD_NOPANTS); 
mkd_compile(document,MKD_NOPANTS); 
mkd_document(document,&result); 
QString renderedHtml = QString::fromUtf8(result); 
return renderedHtml; 

я использую обычно работают на жидком «-lmarkdown» флаг для компиляции (для скидки совместно библиотека). но в Qt я не знаю, как это сделать. я попытался

QMAKE_LFLAGS += -lmarkdown 

и

unix|win32: LIBS += -lmarkdown 

, но не работает. Сообщения об ошибках:

undefined reference to `mkd_string(char const*, int, unsigned int)' 
undefined reference to `mkd_compile(void*, unsigned int)' 

и т.д ...

любая помощь?

+0

Я сообщил об этой проблеме для вас [здесь] (https://github.com/Orc/discount/issues/113). – lpapp

ответ

0

Похоже, авторы библиотеки уценок не рассматривали пользователей C++.

Шаг 1: Убедитесь, что libmarkdown экспортирует символы, которые вы ищете:

nm /path/to/libmarkdown.{a,so} | grep 'mkd_string' 

Если вы видите что-то вроде

0x123456 T mkd_string 

мое предположение верно. Если вы видите что-то вроде этого:

0x123456 T _Z10mkd_stringPKcij 

Мое предположение неверно.

Шаг 2: если мое предположение верно, то вам нужно изменить так, как вы к этому #include <mkdio.h>:

extern "C" { 
#include <mkdio.h> 
} 

Вы также можете связаться с разработчиками библиотеки, и пусть они знают, что они могут устранить эту проблему довольно легко, поставив эквивалентный код в mkdio.h.

P.S. Подробнее о C++ name mangling here.

+0

Привет, спасибо, что он работает сейчас :-) У меня есть некоторые проблемы с самой библиотекой, но она скомпилирована, как и ожидалось – Abdeljalil