I have a project involving
mylib.so
test_mylib
When I try to run gdb
on test_mylib
, it prints:
"test_mylib": not in executable format: File format not recognized
When I use the real program (.libs/test_mylib
) directly instead, it still complains:
.libs/test_mylib: can't load library 'libhello.so.0'
How Can I run gdb to debug my program ?
This is problem I ran into a couples of days ago and there is no generic answer on SO yet. Only special cases. Here is the answer I found on this page: http://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html
Until the program is installed, the system does not know where to look for the shared objects. They usually lies in .libs
sub-directory of their source folder.
Libtool generates a convenience script to allow debugging before the actual installation is done (who wants to install buggy software before, debug it after?)
Fortunately, the generated script provides a helper for this:
libtool --mode=execute gdb test_mylib
The solution recommended by the libtool docs is to use static linking during development, as I decribed at: Build libtool application with static linking to local components
To do this, use the --disable-shared
option to the ./configure
script.
For example:
./configure --enable-debug --disable-shared
Now the generated executable is a directly executable binary rather than a libtool script.
This has the added benefit of roughly halving the build time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With