将折扣库与Qt链接时出错

时间:2014-11-01 18:02:10

标签: c++ qt shared-libraries discount

我正在开发使用折扣库的项目。 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)'

等...

任何帮助?

1 个答案:

答案 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的更多信息。

相关问题