我正在开发使用折扣库的项目。 http://www.pell.portland.or.us/~orc/Code/discount/ 我在我的机器上安装了库,包括:
#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;
usualy我使用“-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 :(得分:0)
Markdown库的作者似乎没有考虑像您这样的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 ++名称mangling here的更多信息。