Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a simple shared library

I am trying to learn the shared library concepts on linux using GCC. So I have created a simple library.

library.c

int foo(void)  {
    return 10;
}

This is compiled using,

cc -fPIC -g -c library.c
cc -shared -fPIC -Wl,-soname,libmytest.so.1 -o libmytest.so.1.0.1 library.o -lc

It created the file libmytest.so.1.0.1 in the current directory. Now I am writing a client to consume this library in the same directory.

client.c

#include <stdio.h>

extern int foo(void);

int main()
{
    int a = foo();
    printf("a is %d", a);
    return 0;
}

compiling using,

cc client.c -o client -lmytest

but this exits with the message

/usr/bin/ld: cannot find -lmytest
collect2: ld returned 1 exit status

Can anyone help me to find out what I am doing wrong here?

like image 662
Navaneeth K N Avatar asked Apr 30 '26 06:04

Navaneeth K N


1 Answers

Try using a -L option which is used to add a directory to the list of directories that are searched for the -l option:

cc client.c -L. -o client -lmytest

Assuming the .so is present in the same directory as client.c. If not add suitable path.

The linker on seeing -lmytest looks for libmytest.so but you have a version number appended to it so it does not work. Way to fix this is to create a symlink named libmytest.so pointing to libmytest.so.1.0.1

ln -s libmytest.so.1.0.1 libmytest.so   

Alternatively you can use the complete library name on the compile/link line as:

cc client.c ./libmytest.so.1.0.1 -o client 
like image 115
codaddict Avatar answered May 02 '26 21:05

codaddict