how can I use eclipse to debug a libtool generated script?
-
15-04-2021 - |
Question
I have a large c++ project built with libtool. the problem is that eclipse will not run a libtool generated script, and I get a "Program is not a recognized executable." error message. how can I use eclipse debugger? I'm currently using kdevelop3 as an editor and debugging with insight.. which is horrible.
I could perhaps run the actual executable, thats in the ./libs of the project directory, but then I would have to manually set LD_LIBRARY_PATH and stuff like that... there must be a better way to so this.
any help would be appreciated!
Solution
Running a script instead of an executable is still unsupported in Eclipse, see this bug. Until the feature is introduced, you cannot debug a libtool-enabled project under Eclipse unless you keep something like a
path/to/configure --disable-shared
separate configuration, thus relying on static linking only for debugging purposes.
To do that, you
Open
Project|Properties
from the top menuSelect
Autotools|Configure Settings
from the left menu of the window(Optionally) Create a new build configuration with a dedicated
C/C++ Build|Builder Settings|Build location
Under
configure|Advanced
, fill the "Additional command-line options" with--disable-shared
OTHER TIPS
You can work around it by running the actual executable instead of the libtool script. The executable will generally be found in .libs/
. So in your debug configuration on the main tab set the value of C/C++ Application
to something like .libs/my_application
. Then all you'll need to do us update LD_LIBRARY_PATH
within your debug configuration.
Go to the environment tab of your debug configuration and make a new environment variable called LD_LIBRARY_PATH
. You'll want to append the .libs
directory to the path. So the value should look like this: ${project_loc}/.libs:$LD_LIBRARY_PATH
assuming your .libs
folder is right inside of the project directory.
I think one could write a little wrapper program to interpose an exec of 'sh libtool --mode execute' to run gdb. Call it 'gdb-libtool' and invoke that instead of gdb.
I am developing under both Windows and Linux so it's something I need for myself.
There are a few tricky bits, like getting the paths right at libtool and gdb invocation.. off to take a swat at that.
Cheers, Jerry.
For the first point, you can disable intermediate libtool script by adding -no-install
to LDFLAGS
in your Makefile.am
OR you can just run make install
and debug from installed binary.
For the second point, you'll have to set and export your LD_LIBRARY_PATH
before launching eclipse.
You need to convince eclipse to start gdb like this:
$ libtool --mode=execute gdb <your-program>
See https://www.gnu.org/s/libtool/manual/html_node/Debugging-executables.html