C++で共有オブジェクトをロードする方法は2つあります。
これらのメソッドのいずれについても、使用するオブジェクトのヘッダーファイルが常に必要になります。ヘッダーには、コードで使用するクラスまたはオブジェクトの定義が含まれます。
静的に:
#include "blah.h"
int main()
{
ClassFromBlah a;
a.DoSomething();
}
gcc yourfile.cpp -lblah
動的に(Linuxの場合):
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main(int argc, char **argv) {
void *handle;
double (*cosine)(double);
char *error;
handle = dlopen ("libm.so", RTLD_LAZY);
if (!handle) {
fprintf (stderr, "%s\n", dlerror());
exit(1);
}
dlerror(); /* Clear any existing error */
cosine = dlsym(handle, "cos");
if ((error = dlerror()) != NULL) {
fprintf (stderr, "%s\n", error);
exit(1);
}
printf ("%f\n", (*cosine)(2.0));
dlclose(handle);
return 0;
}
* dlopenLinuxのマニュアルページから盗まれた
Windowsまたはその他のプラットフォームでのプロセスは同じです。dlopenをプラットフォームバージョンの動的シンボル検索に置き換えるだけです。
動的メソッドが機能するには、インポート/エクスポートするすべてのシンボルに外部Cリンケージが必要です。
静的リンクを使用する場合と動的リンクを使用する場合について、ここにいくつかの単語があります。