Solved

xlC:How to create a shared library? (AIX)

Posted on 2001-06-05
4
1,266 Views
Last Modified: 2011-04-14
How do I create a shared library with xlC?

Any good web links or procedures would be greatly
appreciated.  I am finding some things for gcc but
I need xlC to work.

Thanks in advance.
0
Comment
Question by:Leimy2k
4 Comments
 
LVL 6

Expert Comment

by:Talmash
ID: 6158945
hi ,

do you mean shared library by permission meanings ?

chmod 775 <lib_name>

Tal
0
 
LVL 3

Accepted Solution

by:
mrn060900 earned 75 total points
ID: 6159225
The precise method for creating shared libraries varies between different systems.

There are two main parts to the process;

firstly the objects to be included in the shared library must be compiled, usually with options to indicate that the code is to be position-independent;

secondly, these objects are linked together to form the library.

Here's a trivial example that should illustrate the idea:

/* file shrobj.c */
const char *myfunc()
{
    return "Hello World";
}
/* end shrobj.c */

/* file hello.c */
#include <stdio.h>
extern const char *myfunc();
main()
{
    printf("%s\n", myfunc());
    return 0;
}
/* end hello.c */

$ gcc -fpic -c shrobj.c

$ gcc -shared -o libshared.so shrobj.o

$ gcc hello.c libshared.so

$ ./a.out

Hello World

By far the best method if you want the library and build procedure to be anything approaching portable is to use GNU Libtool.

This is a small suite of utilities which know about the platform-dependent aspects of building shared libraries;

you can distribute the necessary bits with your program, so that when the installer configures the package, he or
she can decide what libraries to build. Libtool works fine on systems which do not support shared libraries. It also knows how to hook into GNU Autoconf and GNU Automake (if you use those tools to manage your program's build procedure).

If you don't want to use Libtool, then for compilers other than gcc, you should change the compiler options as follows:

AIX 3.2 using xlc (unverified)

Drop the `-fpic', and use `-bM:SRE -bE:libshared.exp' instead of `-shared'.

You also need to create a file `libshared.exp' containing the list of symbols to export, in this case `myfunc'.

In addition, use `-e _nostart' when linking the library (on newer versions of AIX, I believe this changes to `-bnoentry').

Hope this helps

Regards Mike
0
 
LVL 20

Expert Comment

by:tfewster
ID: 7705124
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation for this question in the Cleanup topic area as follows:
- Answered by mrn

Please leave any comments here within the next 7 days

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER !

tfewster (I don't work here, I'm just an Expert :-)
0
 

Expert Comment

by:modulo
ID: 7757475
Finalized as proposed

modulo

Community Support Moderator
Experts Exchange
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Hello fellow BSD lovers, I've created a patch process for patching openjdk6 for BSD (FreeBSD specifically), although I tried to keep all BSD versions in mind when creating my patch. Welcome to OpenJDK6 on BSD First let me start with a little …
Java performance on Solaris - Managing CPUs There are various resource controls in operating system which directly/indirectly influence the performance of application. one of the most important resource controls is "CPU".   In a multithreaded…
Learn how to find files with the shell using the find and locate commands. Use locate to find a needle in a haystack.: With locate, check if the file still exists.: Use find to get the actual location of the file.:
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now