Writing MakeFile for generating a .so file

I need to write a makefile which creates a .so file
from .cpp files. Can somebody help me in providing me with this sample makefile.

Please also provide me with links to help me in writing makefiles

I tried doing a man but it it is too complicated for me.
A tutorial would be helpfull.
vreshAsked:
Who is Participating?
 
svedagiriCommented:
Since you say that your knowledge on
writing make files are limited, Here is how you have to write you makefile
Actually I am re-iterating what elfie and hoffmann into  the follwing

Copy the following to Makefile
******************************
SO = your.so
OBJ = something.o
CPPS = something.cpp
something.o: $(CPPS)
        gcc -fPIC -c $(CPPS) -o $@
        ld -G $@ -o $(SO)
*******************************

Please remember that before gcc and ld you
have to give tab characters (when you copy this it might
result to blank, just remove the blanks and add a tab)

Hope this is helpfull
0
 
elfieCommented:
when using gcc compiler

compile object with options ggc -fPIC

When build ing the .so combine all .o files into an so file, using option -G for ld. so it will be ld -G all_o_files -o file.so


0
 
ahoffmannCommented:
which platform?
0
Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

 
vreshAuthor Commented:
Platform is Solaris 2.6
0
 
vreshAuthor Commented:
Platform is Solaris 2.6
Elfie, I also require to know how to write a make file.... Thanks
0
 
ahoffmannCommented:
file.o: file.c
    cc -fPIC -c $< -o $@

libxxx.so: file.o
    ld -B symbolic  -o $@ $<
0
 
vreshAuthor Commented:
I require a sample make file to do it and
when i use ld it starts giving me errors like
Undefined                       first referenced
 symbol                             in file
__builtin_vec_new                   cstring.o

Sorry to reject your answer
0
 
ahoffmannCommented:
You need to pass more information (post Makefile).
Is builtin_vec_new  a function which you have defined in your .c file?
0
 
elfieCommented:
ahoffman,

for making an .so doesn't you need to specify the -B option?


   -G           In dynamic mode only, produce a shared  object.
                 Undefined symbols are allowed.


0
 
ahoffmannCommented:
I agree, elfie.
I meant  ld -dy , sorry (options have changed due to different OS releases):
0
 
elfieCommented:
If the function builtin_vec_new is present in a file (or .so) you added to your link command, try changing the order of the file

if you have a line like
ld -o prog library.so file1.0 file2.o,

change it into
ld -o prog file1.o file2.o library.so


If you are using 'ld' to build the program, you need to specify a n umber of system libraries also, so for building your it's better to use 'cc', so easier is
cc -o prog file1.o file2.o library.so



0
 
ahoffmannCommented:
hmm, elfie,
order of libs and/.o files should not be essential while using .so libs, .o files are searched first, then all libs
That's one of the advantages of shared objects ;-)
(but ld may have changed its algorithm, I don't know ...)
0
 
elfieCommented:
we once had problems (on HP-UX 9.x) that the order of libs linking libs could influence the behavior of programs.

In case where a routine resides in two libraries, it took the first instance, and then search further for other called routines.

Probably not the case here, but ...
0
 
tangywCommented:
How about using ar command?
please using
%man ar
to see the detail.
0
 
ahoffmannCommented:
tangyw, we're talking about .so
0
 
vreshAuthor Commented:
It worked but where can I find help on writing makefiles

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.