I'm trying to compile an executable file which i want also to use as shared library. When i'm clearly compile and linking it as "executable" - everything fine - file could start and work correctly. At this phase i cant correctly linking other libraries with it (tons of redefinitions in log). When i'm trying to add options -Fpic -shared - program copiles successfully, but starting with segmentation fault. How can i make it executable and "sharedlibrary" at the same time?
1 Answer
A single file cannot be a shared library and an executable at the same time. But you can link your object files twice to make both. It'd go something like this:
g++ -c -o module.o module.cpp # create an object that has no main()
g++ -shared -fPIC -o libmodule.so module.o # build shared library
g++ -o program module.o main.cpp # build executable
Or instead, the last line could link the shared library (in which case you'll need the library present when you run the executable):
g++ -o program -l module main.cpp
3 Comments
Basile Starynkevitch
This is wrong: on many systems
libc.so.6 is both a shared library and an executable program.John Zwinck
Technically correct--the best kind of correct! But anyway, 99.99% of executables are not shared objects and vice versa. Let's say you "can" but also you "probably won't." I also tried executing my libc on Mac OS X, and it cannot.
Employed Russian
This answer is incorrect (at least on linux): see stackoverflow.com/a/1451482/50617
shared libraryenabled, and didn't have the issues you describe. So it is possible./lib/libc.so.6...