g++で作ったダイナミックライブラリはdlopen(2)で呼び出すことはできても、dlsym(2)で正常な関数ポインタを作ることができない。g++で作った関数は妙な名前にマングルされているためである。
これを解決するためには、extern "C"でシンボル名をマングルされないようにしなければならない(ccでコンパイルしたときのシンボル名になる)。これで、適当なオブジェクト型を返すような関数をロードする側が前もって知っておくことができれば、g++で作ったライブラリもダイナミックに呼び出すことができる。