• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 629
  • Last Modified:

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.
0
vresh
Asked:
vresh
  • 6
  • 4
  • 4
  • +2
1 Solution
 
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
 
vreshAuthor Commented:
Platform is Solaris 2.6
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
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
 
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
 
vreshAuthor Commented:
It worked but where can I find help on writing makefiles

0

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 6
  • 4
  • 4
  • +2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now