5

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?

qmor
  • 568
  • 6
  • 20

1 Answers1

7

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
John Zwinck
  • 239,568
  • 38
  • 324
  • 436
  • 6
    This is wrong: on many systems `libc.so.6` is both a shared library and an executable program. – Basile Starynkevitch Dec 26 '13 at 11:13
  • 2
    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. – John Zwinck Dec 26 '13 at 11:29
  • 6
    This answer is incorrect (at least on linux): see http://stackoverflow.com/a/1451482/50617 – Employed Russian Aug 03 '14 at 15:58