Sponsored Content
Top Forums Programming Conditions/suggestions to use shared library in C/C++ coding Post 303017560 by bakunin on Thursday 17th of May 2018 08:24:45 PM
Old 05-17-2018
Quote:
Originally Posted by yifangt
What are the basic conditions to use other people's library in C/C++ coding?
You seem to not understand how executable code is produced from source code. Here is the short version and it is the same for every compiled language:

When a compiler translates source code it produces so-called object code, also called a "relocatible file". Basically this is executable code but without the provisions to use external functions. What are external functions. For instance, when you use the printf()-function in your code it has to come from somewhere. This somewhere is a (standard-)library. More on that later.

Once you have created object files from all of your source code files you want to create the executable itself. This is done by a linker (the precise name is "linkage editor"), which searches the libraries for i.e. the object code for the printf()-function and adds it to the executable so that it can run independently. This is called "static linking". You need to tell the linker which path(es) to search for eligible libraries, this is where i.e. the "-L" switch comes into play.

It is also possible to create the executable so that the code for the printf()-function is not included into the executable. Since many programs use that function they would all have to incorporate it. It would be easier to just put a reference into the executable and this would load the code at runtime from the library. The advantage is that instead of every executable containing a copy of the function you have it only once on your disk. The drawback is that the executable won't run on its own without the library being present. This is called "dynamic linking" and the libaries that allow for this are called "shared libraries" in UNIX and derived systems, "dynamic link libraries" (DLLs) in Windows. You need to tell the executable at runtime where these libraries are to be found. This is what the environment variables LIBPATH, LD_LIBRARY_PATH, etc. are for.

Finally you can create libraries on your own from your object files: this makes sense if you want to use a function in several programs. You use the command ar to manage libraries: you can add, extract or otherwise manipulate object files to/from libraries with it. In Windows (there is no pendant to ar in Windows) a linker is used for this.

At last: how to use libraries. In most languages a "function" (or "procedure") is a black box: you give it some data in a certain format and it dows something with it, then gives back a return value (and has maybe changed the data, this is called a "side effect" and should usually be avoided). How this is done should not be your concern. (This in fact is one of the tenets of structured programming.) In C there are header files telling you (and the compiler) which "interface" every function has. That is: which data it expects and what it gives back. So, to answer your question: you "need" the header filles and the library itself. Of course you need to know what the functions do, so some text documentation is also necessary.

I hope this helps.

bakunin
This User Gave Thanks to bakunin For This Post:
 

10 More Discussions You Might Find Interesting

1. Programming

Shared Library

hello all I want to work in shared libraries how can i work in Linux Environment ? (2 Replies)
Discussion started by: rajashekaran
2 Replies

2. UNIX for Advanced & Expert Users

shared library

What is the primary difference between static library and dynamic library? and how to write static shared library? (1 Reply)
Discussion started by: areef4u
1 Replies

3. Programming

Shared memory in shared library

I need to create a shared library to access an in memory DB. The DB is not huge, but big enough to make it cumbersome to carry around in every single process using the shared library. Luckily, it is pretty static information, so I don't need to worry much about synchronizing the data between... (12 Replies)
Discussion started by: DreamWarrior
12 Replies

4. Programming

Using funcion in a shared library

Is there any way in C to access a function in C shared library. I have used dlopen to access /load the c shared library but unable to use the function in the shared object. Thanks in advance :b: (1 Reply)
Discussion started by: yhacks
1 Replies

5. Programming

Shared memory for shared library

I am writing a shared library in Linux (but compatible with other UNIXes) and I want to allow multiple instances to share a piece of memory -- 1 byte is enough. What's the "best" way to do this? I want to optimize for speed and portability. Obviously, I'll have to worry about mutual exclusion. (0 Replies)
Discussion started by: otheus
0 Replies

6. Shell Programming and Scripting

Suggestions/Recommendations for coding

#!/bin/sh #set -x uploaddir="/u01/app/informatica/dev3/sample/GPMDir/UploadDir" processdir="/u01/app/informatica/dev3/sample/GPMDir/ProcessDir" datetime=`date +%Y%m%d` logdir="$processdir/GPMLogFile_$datetime.log" echo "<---------------Start Copying & Moving GPM Files To Process... (0 Replies)
Discussion started by: Ariean
0 Replies

7. Shell Programming and Scripting

How to change a Makefile from building static library to shared library?

Hi: I have a library that it only offers Makefile for building static library. It built libxxx.a file. How do I in any way build a shared library? (either changin the Makefile or direct script or command to build shared library) Thanks. (1 Reply)
Discussion started by: cpthk
1 Replies

8. UNIX for Dummies Questions & Answers

Shared static library

Hello Please what does mean shared static library and LD-Preload? Thank you (3 Replies)
Discussion started by: chercheur857
3 Replies

9. Programming

Shared library with acces to shared memory.

Hello. I am new to this forum and I would like to ask for advice about low level POSIX programming. I have to implement a POSIX compliant C shared library. A file will have some variables and the shared library will have some functions which need those variables. There is one special... (5 Replies)
Discussion started by: iamjag
5 Replies

10. AIX

Add shared members from library to same library in a different directory

I'm trying to install libiconv to AIX 7.1 from an rpm off of the perzl site. The rpm appears to install but I get this error message. add shr4.o shared members from /usr/lib/libiconv.a to /opt/freeware/lib/libiconv.a add shr.o shared members from /usr/lib/libiconv.a to ... (5 Replies)
Discussion started by: kneemoe
5 Replies
All times are GMT -4. The time now is 07:49 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy