I'm trying to start plugin development and followed wiki for HelloWorld plugin.
It compiles fine but as I try to add the new plugin I get following error on the terminal:
(codeblocks:3285): Gtk-CRITICAL **: gtk_text_buffer_emit_insert: assertion `g_utf8_validate (text, len, NULL)' failed
Failed
I'm developing on Linux, installed wxWidget and Code::Blocks from sources as described on
http://wiki.codeblocks.org/index.php?title=Installing_Code::Blocks_from_source_on_Linux
Output from "wx-config --libs":
-L/opt/wx/2.8/lib -pthread -lwx_gtk2u-2.8
and the output from "wx-config --prefix" is in $LD_LIBRARY_PATH.
I read on a previous post that such error was solved by a user by linking to correct libraries, but I was not able to find how.
Hope someone can give me a hint.
Thanks!
Maybe this helps:
http://www.c-plusplus.de/forum/160326 (http://www.c-plusplus.de/forum/160326)
If it happens in your plugin, it's not a C::B issue.
Thanks for your hint, unfortunately it's not the case.
It's a new plugin, but anything is created automatically through Code::Blocks procedures.
Maybe I was not fully clear in my previous message, sorry about that:
- I start codeblocks compiled from sources.
- I create a new plugin project, named HelloWorld as detailed on wiki page
- I compile the plugin project anhat add it goes fine
- I try to "Install new" plugin in plugin manager and it fails with Gtk message
The only change I did to what Code::Blocks creates automatically is to copy libHelloWorld.so file to HelloWorld.so and to zip HelloWorld.so in plugin.
If I don't do this the plugin manager complais for: File 'HelloWorld.so' not found in plugin '/home/Development/CodeBlocks/HelloWorldPlugin/HelloWorld.cbplugin'
I'm currently trying to track the code execution in Code::Blocks methods related to installing new plugins.
Suggestions of any kind are always welcome!
As an update to problem description, and hopefully a hint to get hint:
file src/include/cbplugin.h
in PluginRegistrant::PluginRegistrant
I get correct value for parameter "name" -> HelloWorld
This method contains only following call:
Manager::Get()->GetPluginManager()->RegisterPlugin(name, // plugin's name
&CreatePlugin, // creation
&FreePlugin, // destruction
&SDKVersion); // SDK version
both "Manager::Get()" and "Manager::Get()->GetPluginManager()" return valid instances
method declaration in src/include/pluginmanager.h is
void RegisterPlugin(const wxString& name,
CreatePluginProc createProc,
FreePluginProc freeProc,
PluginSDKVersionProc versionProc);
but in the file sdk/pluginmanager.cpp
method PluginManager::RegisterPlugin
the first parameter contains odd values: lenght is correct, memory address is still the same as in PluginRegistrant::PluginRegistrant, characters in wxString are no more correct
Hope this information could be helpful to someone to help me.
I have no idea on how to proceed deeper in code inspection... maybe gdb on memory address but I don't know how to get who is modifying the value.
Thanks!
Orione:
How many versions of C::B do you have installed?
To compile a plugin on linux you don't have to build from source, because we provide usable sdk.
You can use pkg-config to get the proper compiler/linker settings.
What is the output of ldd libyourplugin.so?
If you have mixed libraries there is no point in debugging it with gdb.
Thanks for your help!
Problem was related to a library mess as I had two set of libraries for wx.
I went to reset both of them and to remove all Code::Blocks libraries too.
Then started again compiling a unicode version of wxWidgets and Code::Blocks from SVN.
Now I have a fully functional and updated IDE where I can develope my own plugins!
Hope I could give back help next time!