pa_module_load
打开动态库 dl = lt_dlopenext(name)
获取入口函数 init = lt_dlsym(m->dl, "pa_module_init")
获取结束函数 done = lt_dlsym(m->dl, "pa_module_done")
调用入口函数 m->init(c, m)
将module存入到core的modules中pa_idxset_put(c->modules, m, &m->index)
pa_module_unload
pa_idxset_remove_by_data(c->modules, m, NULL) 将module从core中modules中去掉
pa_module_free()
done(m->core, m) 执行结束函数
lt_dlclose(m->dl) 关闭动态库
module是动态库,每个module对应的源文件(找几个经典的),从Makefile.am中查找
• module-alsa-sink
module_alsa_sink_la_SOURCES = module-alsa-sink.c
module_alsa_sink_la_LDFLAGS = -module -avoid-version
module_alsa_sink_la_LIBADD = $(AM_LIBADD) $(ASOUNDLIB_LIBS) libalsa-util.la
module_alsa_sink_la_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
• module-alsa-source
module_alsa_source_la_SOURCES = module-alsa-source.c
module_alsa_source_la_LDFLAGS = -module -avoid-version
module_alsa_source_la_LIBADD = $(AM_LIBADD) $(ASOUNDLIB_LIBS) libalsa-util.la
module_alsa_source_la_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
• module-native-protocol-unix
module_native_protocol_unix_la_SOURCES = module-protocol-stub.c
module_native_protocol_unix_la_CFLAGS = -DUSE_UNIX_SOCKETS -DUSE_PROTOCOL_NATIVE $(AM_CFLAGS)
module_native_protocol_unix_la_LDFLAGS = -module -avoid-version
module_native_protocol_unix_la_LIBADD = $(AM_LIBADD) libprotocol-native.la libsocket-server.la libsocket-util.la
备注:
库名字是中画线,makefile中target是下划线
例如:
库名 module-native-protocol-unix
target名 module_native_protocol_unix