How to run c program with .so file

NIket picture NIket · Jan 25, 2016 · Viewed 27.4k times · Source

I have gone through all the solutions on StackOverflow as well as Ask Ubuntu.

I have a Go program:

package main

import "C"

//export Getint
func Getint() int {
        return  2
}

func main() {}

and I have generated .so file for the same with name t.so and header filet.h`

Now I would like to use this function in my C program.
I have written the code but I don't know how to execute it.

#include <stdio.h>
#include <t.h>
int main()
{
int a;
a=Getint();
printf("number : %d",a);
return 0;
}

When I execute it with

gcc c.c t.so

it generates a.out file

but at the time of running a.out with ./a.out it gives an error:

./a.out
Error while loading shared libraries: t.so: can not open shared object file: no such file or directory exists.

then I tried with:

gcc -c c.c -l t.so

So it generates c.o file and it is not executable.

Answer

Some programmer dude picture Some programmer dude · Jan 25, 2016

You should use the linker option -rpath, which tells the linker to add information in the executable program where to find runtime libraries like your .so file.

This can be done using the GCC option -Wl which instructs the GCC frontend program to pass an option to the linker:

$ gcc c.c t.so -Wl,-rpath=$(pwd)

This will pass -rpath=$(pwd) to the linker, and $(pwd) causes the shell to call the pwd command to return the current directory.

As long as you don't move the library the program should work.


You can use the environment variable LD_LIBRARY_PATH too, but it's not recommended.