ある共有ライブラリに依存している共有ライブラリを生成したかったので,hello worldとしてまとめます.
hello2.cはhello1.cに依存しています.hello1.cは普通に共有ライブラリを作ればよいのですが,hello2.cの共有ライブラリは依存している共有ライブラリを宣言しなければなりません.-Lオプションは後にその共有ライブラリのディレクトリを指定します.例ではカレントディレクトリを指定しています.-Wlオプションはリンカへオプションを伝えてあげるもので,続くrapthで動的ライブラリのサーチパスを指定しています.-ltest1というオプションはlibtest1.soという共有ライブラリを指定したいので,libをlに変え,.so以下を消したものです.
hello1.c
#include <stdio.h>
#include "hello.h"
void hello1(void)
{
printf("Hello World!\n");
}
hello2.c
#include "hello.h"
void hello2(void)
{
hello1();
}
hello.h
void hello1(void);
void hello2(void);
shell
gcc -shared -fPIC -o libtest1.so hello1.c
gcc -shared -fPIC -o libtest2.so hello2.c -L . -Wl,-rpath,. -ltest1
Pythonから呼び出して確認します.
test.py
import ctypes
libc2 = ctypes.cdll.LoadLibrary('./libtest2.so')
libc2.hello2()
以下のように出力されました.
Hello World!
参考
ライブラリとは何なのか? -Qiita
linux - linuxでの共有ライブラリのリンクについて - スタック・オーバーフロー