V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bluesky139
V2EX  ›  C

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

  •  
  •   bluesky139 · 2015-11-30 09:39:41 +08:00 · 2027 次点击
    这是一个创建于 3280 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 09:44:51 +08:00
    objdump -Dslx libfdk-aac.so.1.0.0 | grep Get_AacEncoder
    harry890829
        2
    harry890829  
       2015-11-30 09:45:24 +08:00
    那个 cpp 包含了什么头文件呢?都是系统的么?
    kkhaike
        3
    kkhaike  
       2015-11-30 09:47:38 +08:00
    搞错了,这个好像是目标
    zhuangzhuang1988
        4
    zhuangzhuang1988  
       2015-11-30 09:51:02 +08:00
    让你不用 ide!!
    harry890829
        5
    harry890829  
       2015-11-30 09:55:26 +08:00
    @zhuangzhuang1988 哈哈,用 ide 确实直接查看定义就好
    bluesky139
        6
    bluesky139  
    OP
       2015-11-30 09:57:50 +08:00
    @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_AacEncoderiE19__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 09:59:02 +08:00   ❤️ 1
    kkhaike
        8
    kkhaike  
       2015-11-30 09:59:44 +08:00
    那是编译进去了,是不是编译前自动生成的代码
    mrhhsg
        9
    mrhhsg  
       2015-11-30 10:00:18 +08:00
    @mrhhsg
    一般来讲如果全文搜索不到的符号,很可能是预定义宏
    kkhaike
        10
    kkhaike  
       2015-11-30 10:00:41 +08:00
    楼上正解
    bluesky139
        11
    bluesky139  
    OP
       2015-11-30 10:00:44 +08:00
    @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 10:03:56 +08:00
    @mrhhsg 多谢,居然没找到,因为 objdump 出来是确有这个函数我就没想函数名跟宏的名字是一样的,唉。
    zhuangzhuang1988
        13
    zhuangzhuang1988  
       2015-11-30 11:16:04 +08:00
    @bluesky139 你这样做也麻烦..
    coofly
        14
    coofly  
       2015-11-30 13:57:45 +08:00
    curl 里边也有一堆函数是像这样用宏定义的
    fxxkgw
        15
    fxxkgw  
       2015-11-30 15:34:52 +08:00
    你可以用 gdb+demo 方式运行 然后 r 之前用 b 加这个函数断点,如果找不到那肯定是宏定义了,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 05:39 · PVG 13:39 · LAX 21:39 · JFK 00:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.