Linux, Mono-D, GtkD and linking

Orvid King via Digitalmars-d-ide digitalmars-d-ide at
Sat Aug 30 08:11:44 PDT 2014

On 8/29/2014 5:32 AM, Bad Sector wrote:
> Hi all,
> I'm trying to evaluate D for my uses (games and game tools development)
> and see how it compares to my current languages (C for engine,
> Lazarus/FreePascal for tools at home and C++ for engine and tools at
> work). For now it is me trying to see how it fares and maybe switching
> to it for my own stuff at the beginning.
> However i have already stumbled on a very fundamental issue: i cannot
> convince DMD to compile and link a GtkD program under MonoD.
> I'm using Ubuntu so MonoD seems to be the best solution so far, even if
> the MonoDevelop environment feels very out of place under Ubuntu/Unity
> (i also tried DDT for Eclipse since i used Eclipse at the past, but DDT
> was freezing constantly and it didn't had good auto completion support).
> I want to have a setup where i can have a few shared libraries (a core
> library, a rendering library, a utility library) and two applications
> (the editor and the engine which will work with data produced by the
> editor - note that unlike some popular engines, i prefer to keep these
> two as separate as possible), one with GC enabled (the editor) and one
> with GC disabled (engine). Both need to link against Derelict (for the
> OpenGL API and SDL2 for the engine) and the editor needs to link against
> GtkD (for its UI).
> For starters i tried to use DUB, but i quickly found out that Mono-D
> tries to import all projects that the dependencies expose (so i had one
> project - my initial test - and 10+ projects i didn't care looking at).
> In addition no settings about the project layout seemed to be saved (i
> made an "External" solution folder to put all the GtkD and Derelict
> projects inside to not occupy visual space, but once i reopened the
> projec in MonoDevelop, the folder wasn't there). Finally just having all
> the projects there seemed to slow down MonoDevelop considerably. So i
> decided to drop DUB, at least for development purposes, and use Mono-D's
> building functionality.
> Mono-D by itself provides much more organization options and feels
> mostly fine (i still dislike MonoDevelop forcing its own theme on me,
> but i can live with that). However i have several issues with its own
> builder.
> First of all, i had to add all the DUB includes and libraries for GtkD
> and Derelict manually in the global includes and libraries settings in
> order for the syntax completion to discover them, despite having them
> being part of DUB (i expected since i have DUB installed and configured
> that Mono-D will see it automatically... or at least provide some
> configuration options to choose which of the installed DUB projects i
> want to use). Note that i added these in the global settings to avoid
> placing anything platform-specific in the project's own settings since
> i'll want to test and compile the project under Windows and OS X too.
> However even with the libraries and includes configured, i had linker
> errors with "dlsym" and "dlerror" missing, which seem to come from the
> libdl. After googling for a while to find how to fix that, i managed to
> make it work by adding 'version(Posix) pragma (lib, "dl");' at the top
> of my test code.
> This worked, but i quickly discovered that building and linking is
> *terribly slow*. One of the reasons i like C is that it has very fast
> compilation and compilation speed is important for my workflow. However
> even C++, which i generally avoid with one of the reasons being
> compilation speed, compiles much faster. Note that my computer only has
> SSD so I/O performance shouldn't be the case.
> I noticed that Mono-D's settings have a single step compilation mode,
> which *may* have to do with this. I tried to disable it but then i got
> back the dlsym errors. I tried to put a -L-ldl in almost every possible
> place in the settings (both global and project) but nothing seemed to
> work. I cannot make the program link against the library. Also
> considering that my test program is still only a single file (i'm just
> trying out GtkD for now) and i read in an old post that pragma lib
> doesn't propagate to other files, it sounds that this wouldn't work with
> my intended setup anyway.
> So at this point i'm not sure how to continue. TBH what i'd like is to
> be able to have Mono-D provide me with a nice UI to select DUB
> dependencies without fussing with library paths, linker flags, etc
> (unless i want to add some extra flags for optimization or debugging, of
> course) and use DUB behind the scenes by itself (and keep the DUB file
> around so i can build the project without having Mono-D installed in
> another D installation and/or operating system) but without polluting my
> project tree with external things i didn't explicitly add (i don't
> consider dependencies something i explicitly added, especially when said
> dependencies - like Derelict - add a ton of things i don't even plan
> using).
> Is there any tips, suggestions or any other help for the above?

It is possible to have a Mono-D solution file with a dub project in it, 
although it's not exactly a straight-forward process to get it into the 
solution in the first place. You have to open both solutions at the same 
time, and drag the dub project into the Mono-D solution and ignore any 
errors it gives you (if any), then you can close the dub solution.

In terms of compile-speed, as I hinted at on the IRC, compiling each 
file individually is usually going to be a lot slower than compiling 
them all at once.

More information about the Digitalmars-d-ide mailing list