编译动态库需要加上“-shared”选项。编译动态库d1.so时,如果用到了动态库d2.so的内容,只需要将d2.so的头文件目录(-I)加进去即可,不需要具体的实现代码,这样基本上实现了d1和d2的独立化。
在编译可执行体时,必须将所有的库(-L和-l)都加进来,并且相关的头文件目录(-I)也得加进来,此外还得加入“-ldl”参数。
如果库之间有依赖关系,还得加入“-rdynamic”参数,该参数将所有的符号都加入到动态符号表里,这样被包含的库可以用到包含的库的符号。
对于dlopen打开的动态库用到多态,在GCC(g++) 3.0版本以后,对于该方法的实现机制不一样了,所以在用dynamic_cast类型转换会有问题。在编译执行体时加入"-Wl,-E"选项,