用c++写了一个Hello World来试验dlopen/dlsym的使用,谁知道不出10行的程序也能出问题。。

具体问题是,调用.so文件中的具体函数时,出现undefined symbol的提示

究其原因,主要是,dlopen/dlsym原本是C的API,C中,动态库中的symbol就是函数名,而c++由于允许重载,就出现了同一个函数名可能对应很多个实际的函数的问题,于是就有了name mangling,而且这个mangling完全没有任何规范可循,由各编译器自定。。


解决办法,简而言之,就是用extern "C",详见Ref【2】。


注:Ref【1】中的dlsym调用在实际中会出现问题,要先用强制转换把返回的void型函数指针转成实际类型


Ref:http://tldp.org/HOWTO/Program-Library-HOWTO/dl-libraries.html#DLOPEN

    http://www.isotton.com/devel/docs/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html#theproblem