Linux, Mono-D, GtkD and linking

Bad Sector via Digitalmars-d-ide digitalmars-d-ide at puremagic.com
Fri Aug 29 03:32:38 PDT 2014


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?


More information about the Digitalmars-d-ide mailing list