链接Qt Creator插件编辑器/荧光笔

时间:2012-10-26 18:59:05

标签: c++ qt qt-creator

我正在开发一个qt creator插件,它通过提供自定义编辑器等来添加对某些类型文件的支持。现在它注册了一个新的IEditorFactory,它生成我基于TextEditor :: BaseTextEditor和TextEditor的编辑器: :BaseTextEditorWidget

最终我将创建和使用专门的荧光笔和其他东西,但是现在我想利用其他qt creator插件中的东西,这就是我遇到麻烦的地方。

特别是我想使用TextEditor :: Internal :: Highlighter,它可以加载和利用kate文件。我已经在使用TextEditor插件中的其他类了,所以我有

include($$QTCREATOR_SOURCES/src/plugins/texteditor/texteditor.pri)

已添加到我的项目文件中。在texteditor.pri内部,一切似乎都很好

include(texteditor_dependencies.pri)
LIBS *= -l$$qtLibraryName(TextEditor)

而且,实际上,我能够编译我的编辑器(这取决于texteditor插件中的内容)。

与TextEditor :: Internal :: Highlighter的唯一区别 - 就我所知 - 它位于texteditor插件的子文件夹中。这应该没问题,并且目标文件似乎都落在同一目录中,但是当我说

new TextEditor::Internal::Highlighter()

(正如在texteditor / plaintexteditor.cpp中所做的那样)我收到链接器错误

Undefined symbols for architecture x86_64:
  "TextEditor::Internal::Highlighter::Highlighter(QTextDocument*)", referenced from:
      MyPlugin::MyEditorWidget::MyEditorWidget(QWidget*)in myeditor.o
      MyPlugin::MyEditorWidget::MyEditorWidget(QWidget*)in myeditor.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

我做错了什么?我必须声明更多的依赖吗?在编译时是否可以使用命令强制将目标文件的文件夹放在我的路径中?

Thnaks!

1 个答案:

答案 0 :(得分:1)

“内部”命名空间中的类和方法往往不会被导出,因此它们在提供它们的插件之外不可用。检查类定义:class关键字和类名之间是否有“SOMETHING_EXPORT”?如果没有,那你就不走运了。

默认情况下,导出尽可能少的符号:这使我们有机会实际改变一切,而不必担心在插件外部破坏代码。它还减少了一点加载时间。如果你有一个用于输出符号的用例:可以在Qt Creator邮件列表上随意询问,或者 - 更好的是 - 为codereview.qt-project.org提供补丁,将类移出内部命名空间并导出符号。

获得此类问题的更好地方是freenode网络上的Qt Creator mailing list和#qt-creator IRC频道。