1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

共有ライブラリの依存関係のhello world

Posted at

ある共有ライブラリに依存している共有ライブラリを生成したかったので,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での共有ライブラリのリンクについて - スタック・オーバーフロー

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?