I tried fixing it a little, e.g. by moving the libpthread I used at compile time to the gp2x and setting the LD_LIBRARY_PATH properly, even ran gdb itself through gdb to see where it was going wrong, and dlopen just didn't see the symbol that supopsedly is there (if you lok with strings, or a proper dumper); I think it's a incompatibility related to the different versions of gcc used, but I don't have the time/resolve to debug it more; like Squidge said, it works well enough and with the proper breakpoints you can dance around the problems. Gdb and screen were just a quick hack (didn't touch any of the code, just compiled it) because I was annoyed they weren't there, and they work for what I want them to do. I thought someone would have build better ones by now, but appears they are fit for purpose for most people.
Suggest you make the directories on the gp2x point to your sd-card (ln -s is your friend).
Also, you probably want screen too, it's just so helpful to be able to swap to a different shell to send signals to your process (not just SIGINT and SIGKILL), or interrupt it with ctrl-C, esp. when not running through gdb. Or to restart the menu after you accidentally exited your shell.
P.