I have a library I am building. All of my objects compile and link successively when I run either one of:
ar rcs lib/libryftts.a $^
gcc -shared $^ -o lib/libryftts.so
in my Makefile. I also am able to successfully install them into /usr/local/lib
When I test the file with nm, all the functions are there.
My problem is that when I run gcc testing/test.c -lryftts -o test && file ./test
or gcc testing/test.c lib/libryftts.a -o test && file ./test
it says:
test: ELF 64-bit LSB shared object
instead of test: ELF 64-bit LSB executable
as I would expect. What am I doing wrong?
What am I doing wrong?
Nothing.
It sounds like your GCC is configured to build -pie
binaries by default. These binaries really are shared libraries (of type ET_DYN
), except they run just like a normal executable would.
So your should just run your binary, and (if it works) not worry about it.
Or you could link your binary with gcc -no-pie ...
and that should produce a non-PIE
executable of type ET_EXEC
, for which file
will say ELF 64-bit LSB executable
.