参照元

説明

例: ダイナミックリンク有効の場合
    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 に指定したシンボル名

引数

返り値

参考

実装

#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);
#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); \
  }
#endif

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-09-13 (土) 08:26:38