Can I create a shared object by using an static lib?


 
Thread Tools Search this Thread
Top Forums Programming Can I create a shared object by using an static lib?
# 1  
Old 05-04-2010
Can I create a shared object by using an static lib?

for example, I have a static lib name liba.a
it offers some interface such a1();a2();
but i do not have the source code of liba.a;
If i would like to create a shared object, and offer the similar interface of
a1 and a2;

Is there a way to fulfill such requirement?
thanks.
# 2  
Old 05-04-2010
I don't think you can magically transform statically linked code into relocatable one. One workaround would be using rpc.
# 3  
Old 05-04-2010
Quote:
Originally Posted by jlliagre
I don't think you can magically transform statically linked code into relocatable one. One workaround would be using rpc.
Thanks jlliagre.

Do you mean that i implement an rpc inforstructure using that statlic lib,
and using rpc to call its interfaces?
# 4  
Old 05-04-2010
yes, that's the idea.
# 5  
Old 05-04-2010
Quote:
Originally Posted by jlliagre
yes, that's the idea.
Thanks Jlliagre.
That's quite a large project than simply use the statlic lib and rebuild my program.
# 6  
Old 05-05-2010
Why not just link it as a static library? You gain nothing by converting it to a shared object, and you'd add an extra run-time dependency to your app.

Even if you use it as a shared object you still have to rebuild your app.

And FWIW, you can usually convert a static archive into a shared object like this:

Code:
-bash-3.2$ ar -x libmylib.a
-bash-3.2$ ld -o libmylib.so *.o

The shared object almost certainly won't have been compiled to be position-independent, so it will require some more work for your run-time linker to load (and may not load on some systems - like a 64-bit shared object on Solaris), but it should work otherwise exactly the same as it it were linked in statically as long as it's relatively basic and simple code.

Converting a static archive into a shared object like that basically gains you nothing in functionality, though, and comes at the expense of additional run-time dependencies.
# 7  
Old 05-06-2010
Its possible ....

Just create your wrapper interface functions and call these functions from there. Compile with --SHARED flag usig gcc.

---------- Post updated 05-06-10 at 12:49 PM ---------- Previous update was 05-05-10 at 08:43 PM ----------

Quote:
Originally Posted by achenle
Why not just link it as a static library? You gain nothing by converting it to a shared object, and you'd add an extra run-time dependency to your app.

Even if you use it as a shared object you still have to rebuild your app.

And FWIW, you can usually convert a static archive into a shared object like this:

Code:
-bash-3.2$ ar -x libmylib.a
-bash-3.2$ ld -o libmylib.so *.o

The shared object almost certainly won't have been compiled to be position-independent, so it will require some more work for your run-time linker to load (and may not load on some systems - like a 64-bit shared object on Solaris), but it should work otherwise exactly the same as it it were linked in statically as long as it's relatively basic and simple code.

Converting a static archive into a shared object like that basically gains you nothing in functionality, though, and comes at the expense of additional run-time dependencies.
Great Advice and very true.
However, on my Linux system what works is as follows:
Code:
-bash-3.2$ ar -x libmylib.a
-bash-3.2$ ld --shared -o libmylib.so *.o

Thanks.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Shared Object Question

Hello, I am new to programming shared objects and I was hoping someone could tell me if what I want to do is possible, or else lead me in the right direction. I have a main program that contains an abstract base class. I also have a subclass that I'm compiling as a shared object. The subclass... (13 Replies)
Discussion started by: dorik
13 Replies

2. Red Hat

shared object

Hi, I would like to create a shared object ( .so). This shared object 1. uses the functions from a library. 2. Also it should be able to use the global variable in an app To achieve this what should I do ? 1) To use the functions in the library should I give the -ld option while... (1 Reply)
Discussion started by: rvan
1 Replies

3. Programming

Error while running shared object

Hello, While running a c++ shared object on AIX I am facing below error - rtld: 0712-001 Symbol __ct__3ETDFv was referenced from module /bancs/aml/lib/libmonitor.so(), but a runtime definition of the symbol was not found. rtld: 0712-001 Symbol etd_insert__3ETDFv was... (3 Replies)
Discussion started by: yatrik007
3 Replies

4. AIX

AIX 5.2 C++ shared object issue

Hi all, I am developing an application with two components. One "c" binary and one "C++" shared object. While execution, the shared object crashes out and core dump is created whenever "new" is executed. But if i use malloc this will work perfectly. I tried to use dbx. Below given was... (1 Reply)
Discussion started by: itssujith
1 Replies

5. HP-UX

shared lib issue

im not good with this stuff but the app guys game to me with a problem with there c++ program on a new box, any ideas? bin- ./qeng Bus error (core dumped) bin- ./gdb qeng core Wildebeest is free software and you are welcome to distribute copies of it under certain conditions; type "show... (4 Replies)
Discussion started by: csaunders
4 Replies

6. UNIX for Advanced & Expert Users

Issue with shared object in AIX

Hi All, I have a problem with the shared objects setup in AIX. We have a customized shell written by the developers over here. When i issue a MQ Series command (mqsilist) it is giving the error as . All the commands making use of this libImbCmdLib.a.so is failing. But when executed in normal... (1 Reply)
Discussion started by: dhanamurthy
1 Replies

7. Programming

calling a shared object from a daemon

Hi I have a multithreaded daemon(server) which will accept connections from various clients and sends back results to them. In order to serve my daemon clients, it has to establish a TCP connection to another server(vendor supplied which is listening on a specific TCP port) and gets the... (11 Replies)
Discussion started by: axes
11 Replies

8. AIX

Shared Object library problem

Hi, When using shared objects on AIX 4.3 i am getting runtime problems. I have a small sample program which links to a shared object libray, oracle and system related libraries. At runtime it fails (gives segmentation fault and coredump ) in one proc file when executing login statement. But... (0 Replies)
Discussion started by: suman_jakkula
0 Replies

9. Linux

Shared Object File

Hi All, I created the share object file using gcc -shared -fpic mypp.cpp -o myp.so but, pls tell me how to link this .so file to my client program. Thanks (0 Replies)
Discussion started by: sarwan
0 Replies

10. Programming

Does my ld support shared object creation

Hi, I have been trying to create a sharef object on my HP UX 11 machine (HP-UX <myhostname> B.11.00 A 9000/879 ...... two-user license) to create the shared object first I am creating the object file using cc -Aa -c +z dyn.c (I use -Aa and +z as per HP's manual on linkers ) to create the... (0 Replies)
Discussion started by: linuxpenguin
0 Replies
Login or Register to Ask a Question