LINUX系の「shared library」がWindowsのDLLに相当だと聞いておりますが、
DLLの場合実行ファイル生成する時に何の情報も無くても良いですが、
「shared library」もそうでしょうか。
要は「shared library」もDLLのように(実行する時に)「動的」提供すれば良いのでしょうか
宜しくお願いします
「shared library」とDLL
Re: 「shared library」とDLL
かずまさま
大変お世話になっております。
貴重なご教授熱く御礼申し上げます。
>「Linux shared library」で検索せずに、,,,なぜですか?
当然、検索しました。
基本は英語で、あれこれ書いたけれども、
あたしの2点の質問に単純明快に答えてくれるのが見つけられませんでした!
大変お世話になっております。
貴重なご教授熱く御礼申し上げます。
>「Linux shared library」で検索せずに、,,,なぜですか?
当然、検索しました。
基本は英語で、あれこれ書いたけれども、
あたしの2点の質問に単純明快に答えてくれるのが見つけられませんでした!
Re: 「shared library」とDLL
DLL の場合、実行ファイルを生成する時に情報をさまよい さんが書きました:LINUX系の「shared library」がWindowsのDLLに相当だと聞いておりますが、
DLLの場合実行ファイル生成する時に何の情報も無くても良いですが、
与えることもできるし、与えないこともできます。
shared library の場合も同様です。
まずは、Windows の DLL からです。
sum.c sum.dll を作ります。 sum.lib と sum.exp もできます。
実行ファイルを生成するときに、インポートライブラリの
sum.lib を使うやり方と、そうでないやり方があります。
main.c コンパイル時に sum.lib を指定する。 main2.c
#include <stdio.h>
#include <windows.h> // HINSTANCE, LoadLibray, GetProcAddress, FreeLibrary
int sum(int);
int main(void)
{
int (*sum)(int);
HINSTANCE h = LoadLibrary("sum.dll");
if (!h) return 1;
sum = (int (*)(int))GetProcAddress(h, "sum");
if (!sum) return 2;
printf("sum(9) = %d\n", sum(9));
FreeLibrary(h);
}
sum.c sum.so を作ります。 main.c コンパイル時に sum.so を指定する。 main2.c
#include <stdio.h>
#include <dlfcn.h> // dlopen, dlsym, dlclose, RTLD_LAZY
int main(void)
{
int (*sum)(int);
void *h = dlopen("sum.so", RTLD_LAZY);
if (!h) return 1;
sum = dlsym(h, "sum");
if (!sum) return 2;
printf("sum(9) = %d\n", sum(9));
dlclose(h);
}