同じ名前の関数を提供するライブラリが 2 つある場合はどうすればよいですか?
55187 次
13 に答える
18
Windows では、LoadLibrary()を使用してこれらのライブラリの 1 つをメモリにロードし、次にGetProcAddress()を使用して、呼び出す必要のある各関数のアドレスを取得し、関数ポインターを介して関数を呼び出すことができます。
例えば
HMODULE lib = LoadLibrary("foo.dll");
void *p = GetProcAddress(lib, "bar");
// cast p to the approriate function pointer type (fp) and call it
(*fp)(arg1, arg2...);
FreeLibrary(lib);
foo.dll 内の bar という名前の関数のアドレスを取得して呼び出します。
Unix システムが同様の機能をサポートしていることは知っていますが、それらの名前が思いつきません。
于 2009-03-24T17:38:04.237 に答える
11
そこに.oファイルがある場合、ここに良い答えがあります: https://stackoverflow.com/a/6940389/4705766
概要:
objcopy --prefix-symbols=pre_string test.o
.o ファイル内のシンボルの名前を変更するには
また
objcopy --redefine-sym old_str=new_str test.o
.o ファイル内の特定のシンボルの名前を変更します。
于 2016-12-29T08:19:36.303 に答える
7
一緒に使用しないでください。私の記憶が正しければ、このような場合、リンカはエラーを出します。
私は試しませんでしたが、動的ライブラリをプログラムで処理できるようにするdlopen()
解決策があるかもしれません。2 つの関数を同時に必要としない場合は、最初のライブラリを開いて最初の関数を使用し、2 番目のライブラリ/関数を使用する前に最初のライブラリを閉じることができます。dlsym()
dlclose()
于 2009-03-24T17:01:38.460 に答える