C/C++ shared libraries on Linux.


 
Thread Tools Search this Thread
Top Forums Programming C/C++ shared libraries on Linux.
# 1  
Old 04-15-2018
C/C++ shared libraries on Linux.

This is the first time that I created a dynamic library in linux and although the program works, I do not get the correct information about the library when executing ldd.

I explain the details:

1) Source code:

bye_fn.c:
Code:
#include <stdio.h>
#include "hello.h"

void bye (const char* name)
{
printf ("\n\n%s, I see you soon !\n\n", name);
}

hello_fn.c:
Code:
#include <stdio.h>
#include "hello.h"

void hello (const char* name)
{
printf ("\n\nHello, %s !\n\n", name);
}


hello.c:
Code:
#include "hello.h"
#include <stdio.h>

int main (void)
{
hello ("José");
printf ("Please to meet you. You will work with us. You start next week. Congratulations !\n");
bye ("José");

return 0;
}


2) Steps followed to obtain the shared library and the executable program:

Code:
gcc -fPIC -Wall -c hello_fn.c

gcc -fPIC -Wall -c bye_fn.c

gcc -shared -Wall -o libhello.so hello_fn.o bye_fn.o

gcc hello.c libhello.so -o hello


3) Steps followed to execute the "hello" program:

Code:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./

./hello

It works right.


4) My question:

If I execute the command: ldd hello
the output is:
Code:
    linux-vdso.so.1 =>  (0x00007ffc1db7c000)
    libhello.so => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007eff63dd2000)
    /lib64/ld-linux-x86-64.so.2 (0x00007eff6419b000)

I would to get correctly the information about the library "libhello.so" that is being used by "hello".

What should I change or add in the steps described in point 2, to achieve this?
Moderator's Comments:
Mod Comment Please use CODE tags when displaying sample input, output, and code segments.

Last edited by Don Cragun; 04-15-2018 at 07:23 PM.. Reason: Add missing CODE and ICODE tags.
These 2 Users Gave Thanks to jose_spain For This Post:
# 2  
Old 04-15-2018
libhello.so has to be in the LD_LIBIRARY_PATH variable for ldd to find it. You should NOT put personal directories in the path.
This User Gave Thanks to jim mcnamara For This Post:
# 3  
Old 04-16-2018
Quote:
Originally Posted by jim mcnamara
libhello.so has to be in the LD_LIBIRARY_PATH variable for ldd to find it. You should NOT put personal directories in the path.
for testing purposes, why not! Jose only want's to see that it works principally.
# 4  
Old 04-16-2018
Thanks,

I have excuted:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:[FULL PATH TO .so FILE]

where:
[FULL_PATH_TO .so FILE] = /home/jose/.../hello_program

But if I execute the command: ldd hello
the output follows being:

linux-vdso.so.1 => (0x00007ffc1db7c000)
libhello.so => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007eff63dd2000)
/lib64/ld-linux-x86-64.so.2 (0x00007eff6419b000)

I am working on Ubuntu 14.0.4
This User Gave Thanks to jose_spain For This Post:
# 5  
Old 04-17-2018
Quote:
Originally Posted by jose_spain
Thanks,
I have excuted:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:[FULL PATH TO .so FILE]
where:
[FULL_PATH_TO .so FILE] = /home/jose/.../hello_program
...
LD_LIBRARY_PATH needs the path and not the file name.
check out: LD_LIBRARY_PATH=${LD_LIBRARY_PATH}: /home/jose/.../
# 6  
Old 04-22-2018
There are also programs like patchelf that can set the "rpath" after linking.
This User Gave Thanks to dryden For This Post:
# 7  
Old 04-30-2018
some simple, nevertheless working code(bin:main.c so:so.c):

  1. libtool --mode=compile gcc -c -O3 so.c
  2. libtool --mode=link gcc -o libso.la so.lo -rpath /usr/local/lib -version-info 6:0:5
  3. gcc -L`pwd`/.libs -Wall -o so main.c -lso
  4. export LD_LIBRARY_PATH=.
  5. ./<app>
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

Self contained shared libraries

Does anyone know whether it is possible to make self contained shared libraries ? (.so files). If so, what is the way to do it ? ---------- Post updated at 08:03 AM ---------- Previous update was at 07:56 AM ---------- On Solaris that is. (6 Replies)
Discussion started by: lkb
6 Replies

2. Red Hat

shared libraries problem

hi, while running the below query it gives the shared libraries prmblem, $ cd /oracle/app/product/fmw/asinst_1/bin/ $ ./opmnctl status /oracle/app/product/fmw/Oracle_IDM1/opmn/bin/opmn: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: Permission... (0 Replies)
Discussion started by: rahulsword
0 Replies

3. AIX

Loaded Shared Libraries

Hi, I have a problem about loaded shared libraries. I'm issuing ‘procldd' for a process and AIX shows me the loaded shared libraries. I'm collecting these libraries and counting their size. They were 350MB. After this, I'm issuing ‘ps vx' and I'm seeing that the process takes 130MB from AIX's... (1 Reply)
Discussion started by: jhatzics
1 Replies

4. UNIX for Advanced & Expert Users

Naming conventions for shared libraries in Linux

Hello, I'm wondering what is the naming conventions for *.so shared libraries in linux. For example, a library in /lib, say libcrypt-2.7.so has a symbolic link called libcrypt.so.1 pointing to it, yet libncursesw.so.5.6 has a symbolic link called libncursesw.so.5 pointing to it. What is the... (2 Replies)
Discussion started by: neked
2 Replies

5. UNIX for Advanced & Expert Users

Shared Libraries- CRITICAL !!

Hi, I am trying to create a shared library from a .c file using gcc -c -fpic -I/usr/local/include Chksum.C -o Chksum.o gcc -shared -o libtclcksum.so Chksum.o when i try to load this shared library libtclcksum.so in tclsh % load libtclcksum.so I get the following error: couldn't load... (1 Reply)
Discussion started by: archana485
1 Replies

6. Programming

how to view loaded shared libraries by running processes in linux

anybody knows how to view loaded shared libraries by running processes in linux enviornment? any command or tool ? thanks a lot (3 Replies)
Discussion started by: princelinux
3 Replies

7. Linux

Shared Libraries

How do i make a library shared say i have a library a.so which i have just compiled. I want to make it shared how do i make it Next Queation is what is the difference between a.so.0 a.so.1 a.so.2 & a.so :rolleyes: (1 Reply)
Discussion started by: wojtyla
1 Replies

8. UNIX for Dummies Questions & Answers

Clarification about shared Libraries

I have a doubt about the shared libraries. Where do you set the path for the shared libaries, for the dynamic loader to locate. Any suggestion would be of great help. thanks (3 Replies)
Discussion started by: ramkumar_gr
3 Replies

9. Programming

shared libraries

I am compiling code which produces .a and .la libraries. How can I produce .so libraries? I know that gcc -shared does but how? (2 Replies)
Discussion started by: thalex
2 Replies

10. Programming

Shared libraries

Hello everybody, I am having major problems at the moment with shared libraries and I have to little knowledge of them to solve them. So please, please help me :) Ok this is the problem: I have a library A, which uses B and C, and C uses again D. If I try to run A as plugin in apache,... (0 Replies)
Discussion started by: Micky
0 Replies
Login or Register to Ask a Question