Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linux executable file as shared library

Tags:

c++

linux

gcc

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?

like image 650
qmor Avatar asked Dec 26 '13 10:12

qmor


1 Answers

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
like image 123
John Zwinck Avatar answered Oct 13 '22 10:10

John Zwinck