Mac OS X で実行時にライブラリ関数に動的にリンクする必要があります。Apple の例に従って、関数ポインタを宣言し、dlsym() の結果を割り当てます。次の例は、プレーン C (.c) ファイルとして正常にコンパイルされます。しかし、これは C++ ファイルで必要であり、この例を C++ ファイル (.cpp) としてコンパイルすると、clang コンパイラが教えてくれます。
型 'void ( )(char *)' の変数を型 'void 'の右辺値で初期化することはできません
プレーンな「C」で動作するのはなぜですか?どうすれば修正できますか?
#include <dlfcn.h>
void Test() {
// Load the library which defines myFunc
void* lib_handle = dlopen("myLib.dylib", RTLD_LOCAL|RTLD_LAZY);
// The following line is an error if compiled as C++
void (*myFunc)(char*) = dlsym(lib_handle, "myFunc");
myFunc("Hello");
dlclose(lib_handle) ;
}