有个 C++的开源项目,我死活找不到一个函数在哪个地方定义的。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bluesky139
V2EX    C

有个 C++的开源项目,我死活找不到一个函数在哪个地方定义的。

  •  
  •   bluesky139 2015 年 11 月 30 日 2497 次点击
    这是一个创建于 3694 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/mstorsjo/fdk-aac
    这个项目很小,就几个文件,几秒就编译完了。

    这个文件:./libAACenc/src/aacenc_lib.cpp
    里面调用了 Get_AacEncoder()这样一个函数,但项目里面找不到实现。
    但又编通过了,那我想这个函数只能是系统函数了,但系统里找遍了也没找到。
    这怎么回事?

    15 条回复    2015-11-30 15:34:52 +08:00
    kkhaike
        1
    kkhaike  
       2015 年 11 月 30 日
    objdump -Dslx libfdk-aac.so.1.0.0 | grep Get_AacEncoder
    harry890829
        2
    harry890829  
       2015 年 11 月 30 日
    那个 cpp 包含了什么头文件呢?都是系统的么?
    kkhaike
        3
    kkhaike  
       2015 年 11 月 30 日
    搞错了,这个好像是目标
    zhuangzhuang1988
        4
    zhuangzhuang1988  
       2015 年 11 月 30 日
    让你不用 ide!!
    harry890829
        5
    harry890829  
       2015 年 11 月 30 日
    @zhuangzhuang1988 哈哈,用 ide 确实直接查看定义就好
    bluesky139
        6
    bluesky139  
    OP
       2015 年 11 月 30 日
    @kkhaike objdump 看到的确实是个函数。
    objdump -Dslx libfdk-aac.so | grep Get_AacEncoder
    000000000008dea0 l O .rodata 0000000000000020 _ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__
    0000000000022b70 l F .text 0000000000000033 _Z14Get_AacEncoderi
    0f910 4765745f 41616345 6e636f64 65726900 Get_AacEncoderi.
    0000000000022b70 <_Z14Get_AacEncoderi>:
    _Z14Get_AacEncoderi():
    22b72: 75 0f jne 22b83 <_Z14Get_AacEncoderi+0x13>
    22b83: 48 8d 0d 16 b3 06 00 lea 0x6b316(%rip),%rcx # 8dea0 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__>
    22d9a: e8 d1 fd ff ff callq 22b70 <_Z14Get_AacEncoderi>
    8de30: 73 74 jae 8dea6 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x6>
    8de3a: 42 75 66 rex.X jne 8dea3 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x3>
    8de3f: 73 63 jae 8dea4 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x4>
    8de47: 73 74 jae 8debd <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x1d>
    8de51: 42 75 66 rex.X jne 8deba <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x1a>
    8de56: 73 63 jae 8debb <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x1b>
    8de7e: 73 2a jae 8deaa <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0xa>
    000000000008dea0 <_ZZ14Get_AacEncoeriE19__PRETTY_FUNCTION__>:
    _Z14Get_AacEncoderi():
    22b3a: 7c 66 jl 22ba2 <_Z14Get_AacEncoderi+0x32>
    22b43: 76 3a jbe 22b7f <_Z14Get_AacEncoderi+0xf>
    22b58: 7d 4a jge 22ba4 <_Z14Get_AacEncoderi+0x34>
    _Z14Get_AacEncoderi():
    22b7c: 79 01 jns 22b7f <_Z14Get_AacEncoderi+0xf>
    22af6: 70 79 jo 22b71 <_Z14Get_AacEncoderi+0x1>
    22b19: 73 65 jae 22b80 <_Z14Get_AacEncoderi+0x10>
    22b27: 42 79 74 rex.X jns 22b9e <_Z14Get_AacEncoderi+0x2e>
    22b2e: 79 74 jns 22ba4 <_Z14Get_AacEncoderi+0x34>
    22b34: 73 65 jae 22b9b <_Z14Get_AacEncoderi+0x2b>
    22b38: 70 42 jo 22b7c <_Z14Get_AacEncoderi+0xc>
    _Z14Get_AacEncoderi():
    22ba2: 73 00 jae 22ba4 <_Z14Get_AacEncoderi+0x34>
    22bab: 72 00 jb 22bad <_Z14Get_AacEncoderi+0x3d>
    _Z14Get_AacEncoderi():
    8de9e: 78 05 js 8dea5 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x5>
    8dea9: 78 05 js 8deb0 <_ZZ14Get_AacEncoderiE19__PRETTY_FUNCTION__+0x10>
    _Z14Get_AacEncoderi():
    mrhhsg
        7
    mrhhsg  
       2015 年 11 月 30 日   1
    kkhaike
        8
    kkhaike  
       2015 年 11 月 30 日
    那是编译进去了,是不是编译前自动生成的代码
    mrhhsg
        9
    mrhhsg  
       2015 年 11 月 30 日
    @mrhhsg
    一般来讲如果全文搜索不到的符号,很可能是预定义宏
    kkhaike
        10
    kkhaike  
       2015 年 11 月 30 日
    楼上正解
    bluesky139
        11
    bluesky139  
    OP
       2015 年 11 月 30 日
    @harry890829
    @zhuangzhuang1988
    不仅包含系统,也包含了一些项目中的文件。
    https://github.com/mstorsjo/fdk-aac/blob/master/libAACenc/src/aacenc_lib.cpp

    不想搞 IDE ,这么小个项目,而且直接 configure 再 make 一下就完了,搞 IDE 麻烦啊。
    bluesky139
        12
    bluesky139  
    OP
       2015 年 11 月 30 日
    @mrhhsg 多谢,居然没找到,因为 objdump 出来是确有这个函数我就没想函数名跟宏的名字是一样的,唉。
    zhuangzhuang1988
        13
    zhuangzhuang1988  
       2015 年 11 月 30 日
    @bluesky139 你这样做也麻烦..
    coofly
        14
    coofly  
       2015 年 11 月 30 日
    curl 里边也有一堆函数是像这样用宏定义的
    fxxkgw
        15
    fxxkgw  
       2015 年 11 月 30 日
    你可以用 gdb+demo 方式运行 然后 r 之前用 b 加这个函数断点,如果找不到那肯定是宏定义了,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     980 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:23 PVG 03:23 LAX 11:23 JFK 14:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86