時々忘れて、汚いファイル群から検索するはめになるので・・・。
環境は、Ubuntu 10.04、CMake、gccですよ。
.soはshared objectの略である。
pythonとC++の連携などで必要になるらしいので・・・。(私は、Pythonは趣味以下のレベル)
共有ライブラリファイル(.so)の作り方
適当にプログラムを書く
(sampleSo.c)
#include
void function1()
{
printf("function1\n");
}
void function2(int i)
{
printf("%d function2\n",i);
}
(CMakeLists.txt)
cmake_minimum_required (VERSION 2.6)
project (sampleSo)
add_library(sampleSo SHARED sampleSo.c)
重要なのはCMakeLists.txtだけですけど・・・。
ビルドのための簡単なコマンドは、
cmake .
make -f Makefile
これで、libsampleSo.soというファイルが生成されるはずです。
とりあえずは、ここまでで良いと思いますよ。
以降は、これをCで使う場合です。
(main.c)
#include
int main()
{
int tmpValue = 5;
void* handle = dlopen("./libsampleSo.so",RTLD_NOW);
void (*func)() = dlsym(handle,"function1"); //関数ポインタ
void (*func2)(int) = dlsym(handle,"function2"); //引数あり
(*func)();
(*func2)(tmpValue);
dlclose(handle);
return 0;
}
次に新たにCMakeファイルを書く
(CMakeLists.txt)
cmake_minimum_required (VERSION 2.6)
project (main)
SET(CMAKE_C_FLAGS "-ldl")
add_executable(main main.c)
ビルドはおなじみ
cmake .
make
実行させてみると
function1
5 function2
と出ているはず。
とりあえず、こんな感じ。