*参照元 [#k6bdfa80] #backlinks *説明 [#wcdecbe9] -パス: --ダイナミックリンク有効: [[alsa-lib-1.0.27.2/include/global.h]] --ダイナミックリンク無効: [[alsa-lib-1.0.27.2/include/global.h]] -FIXME: これは何? --説明 例: ダイナミックリンク有効の場合 libasound.so を nm で見るとたくさん出てくる。 in src/pcm/pcm_hw.c ------------------- SND_DLSYM_BUILD_VERSION(_snd_pcm_hw_open, SND_PCM_DLSYM_VERSION); -> __snd_pcm_hw_open_dlsym_pcm_001 ^(1) ^^^^^^^^^^^^^^^^(2) ^^^^^^^^^^^^^^(3) (1): プレフィクス、常に "_" である (2): name に指定したシンボル名 (3): version に指定したシンボル名 **引数 [#pe0ab3ac] -name --名前(シンボル、文字列ではない) -version --バージョン(シンボル、文字列ではない) **返り値 [#oeb50a03] -なし --関数ではない。 **参考 [#zfcefcdf] -version に指定されるマクロの一覧 --[[alsa-lib-1.0.27.2/SND_CONFIG_DLSYM_VERSION_EVALUATE]] --[[alsa-lib-1.0.27.2/SND_CONFIG_DLSYM_VERSION_HOOK]] --[[alsa-lib-1.0.27.2/SND_CONTROL_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_HWDEP_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_PCM_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_RAWMIDI_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_SEQ_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_TIMER_DLSYM_VERSION]] --[[alsa-lib-1.0.27.2/SND_TIMER_QUERY_DLSYM_VERSION]] *実装 [#mcba42c4] #ifdef PIC /* dynamic build */ -ダイナミックリンク有効の場合 (...略...) /** * \hideinitializer * \brief Appends the build version to the name of a versioned dynamic symbol. */ #define SND_DLSYM_BUILD_VERSION(name, version) char __SND_DLSYM_VERSION(name, version); -char 型の変数を宣言する。変数名は __SND_DLSYM_VERSION() で決める。 --[[alsa-lib-1.0.27.2/__SND_DLSYM_VERSION()]] #else /* static build */ (...略...) /** * \hideinitializer * \brief Appends the build version to the name of a versioned dynamic symbol. */ #define SND_DLSYM_BUILD_VERSION(name, version) \ static struct snd_dlsym_link __SND_DLSYM_VERSION(snd_dlsym_, name, version); \ void __SND_DLSYM_VERSION(snd_dlsym_constructor_, name, version) (void) __attribute__ ((constructor)); \ void __SND_DLSYM_VERSION(snd_dlsym_constructor_, name, version) (void) { \ __SND_DLSYM_VERSION(snd_dlsym_, name, version).next = snd_dlsym_start; \ __SND_DLSYM_VERSION(snd_dlsym_, name, version).dlsym_name = # name; \ __SND_DLSYM_VERSION(snd_dlsym_, name, version).dlsym_ptr = (void *)&name; \ snd_dlsym_start = &__SND_DLSYM_VERSION(snd_dlsym_, name, version); \ } - --[[alsa-lib-1.0.27.2/snd_dlsym_link]] - --[[alsa-lib-1.0.27.2/__SND_DLSYM_VERSION()]] #endif *コメント [#s4450ba5]