Derelict SDL segfaulting on ubuntu?

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Mar 21 07:21:30 PDT 2017


On Tuesday, 21 March 2017 at 12:31:41 UTC, Robly18 wrote:

> Two days of fix attempt laters, here I am. I tried reinstalling 
> and recompiling SDL from source (since the version from apt-get 
> was only 2.0.4 and the one Derelict uses seems to be 2.0.5), 
> and it continues segfaulting at seemingly random places.

Mismatched versions wouldn't be causing a segfault out of the 
box. You'd be getting exceptions instead. The only way Derelict 
would be the cause of the segfault is if one of the function 
pointers is null or one of the function declarations has the 
wrong signature.

This isn't related to your problem, but beginning with 
DerelictSDL2 2.0, you can specify the version of SDL you'd like 
to target, like say 2.0.2:

import derelict.sdl2.sdl;
DerelictSDL2.load(SharedLibVersion(2, 0, 2));

With this, the loader will not throw any exceptions unless the 
library version is lower than the one requested. In that case, 
there is a potential to see segfaults. For example, you request 
at least 2.0.2, the user has 2.0.4, but the binding supports 
2.0.5. The 2.0.5 functions will never be loaded, so the function 
pointers will be null.

If I ever get around to finishing up the documentation, it will 
recommend that you always specify the version you actually want 
and do not attempt to call any functions from later versions 
unless you have a good reason to do so, but always check for null 
first.

>
> I have a function which fills the screen with black using 
> SDL_FillRect... Then, this same function calls another helper 
> function... Which segfaults, at SDL_FillRect. That is, the same 
> function is both working and crashing, when given the exact 
> same arguments, just in different contexts. And I have no idea 
> why.

Looking over your code, I see you aren't doing any error 
checking. Validate all of your return values and call 
SDL_GetError when one of them shows an error (in SDL, that's 
either null or a number < 0, depending on the function). Add some 
asserts or debug code to check the state of the pointers you're 
passing to SDL functions. Given that the program works elsewhere, 
I wouldn't expect this to show the issue, but it's still 
something you should be doing anyway.

>
> I'll put a link to the repo. It is a slightly more updated 
> version than the one I've been trying to compile, but it 
> segfaults anyway. I'm continuing to develop just fine on 
> Windows, but Derelict on Ubuntu has proven to be a nightmare.

Derelict has worked on Ubuntu for years. It doesn't do anything 
special there that it doesn't do on Windows. I'm not able to 
check it at the moment, but I have an Ubuntu laptop I'll try your 
code on when I get the chance (if you don't resolve the issue 
first).

>
> TL;DR: Same code runs on Windows but not Ubuntu, tried to 
> update and recompile all I could, segmentation faults on 
> seemingly random places.
>
> http://www.github.com/robly18/sdltest/




More information about the Digitalmars-d-learn mailing list