【问题标题】:Function names extraction from static library从静态库中提取函数名
【发布时间】:2011-02-12 10:41:12
【问题描述】:

我有一个静态库 static_library.a

如何列出那里实现的功能和方法。 或者至少怎么看有没有实现'FUNCTION_NAME'的具体功能?

【问题讨论】:

    标签: unix extraction static-libraries


    【解决方案1】:

    nm static_library.a
    

    这为您提供了库中符号的完整列表。

    【讨论】:

      【解决方案2】:

      如上所述使用nm <library>

      如果这是一个用 C++ 构建的库,您应该使用 nm --demangle 选项来取回原始符号名称,而不是它们的“损坏”版本。

      【讨论】:

      • 不是 C++,而是 C,所以编译器是 GCC。没有 --demangle 也没关系。考虑到下次,tnx。
      【解决方案3】:

      nm 列出了目标文件中的符号

      $ nm <object file or executable name>
      

      我们来看一个例子:

      //GFICClassA.h
      #import <Foundation/Foundation.h>
      
      NS_ASSUME_NONNULL_BEGIN
      
      @interface GFICClassA : NSObject
      //global constants
      extern int const GFIC_GLOBAL_EXTERN_CONST_INT_1;
      
      extern NSInteger const GFIC_GLOBAL_EXTERN_CONST_NSInteger_1;
      extern NSString *const GFIC_GLOBAL_EXTERN_CONST_NSString_1;
      
      //Public properties first
      @property (nonatomic, strong) NSString *GFICGlobalPropertyNSString1;
      
      //class methods
      + (NSString*)GFICclassMethod1:(NSString*)arg1 :(NSString*)arg2;
      
      //instance methods
      - (NSString*)GFICinstanceMethod1:(NSString*)arg1 :(NSString*)arg2;
      
      - (void) GFICprintHelloWorld;
      @end
      
      NS_ASSUME_NONNULL_END
      
      //GFICClassA.m
      #import "GFICClassA.h"
      
      // Declare global constants
      int const GFIC_GLOBAL_EXTERN_CONST_INT_1 = 1;
      
      NSInteger const GFIC_GLOBAL_EXTERN_CONST_NSInteger_1 = 1;
      NSString *const GFIC_GLOBAL_EXTERN_CONST_NSString_1 = @"GFIC_GLOBAL_EXTERN_CONST_NSString_1_value";
      
      // Declare local constants
      static NSString *const GFIC_LOCAL_STATIC_CONS_1 = @"GFIC_LOCAL_STATIC_CONS_1_value";
      
      @interface GFICClassA ()
      
      @property (strong, nonatomic) NSString *GFICLocalPropertyNSString2;
      
      @end
      
      @implementation GFICClassA
      //class methods
      + (NSString*)GFICclassMethod1:(NSString*)arg1 :(NSString*)arg2 {
          printf("GFI classMethod1 called");
          
          return @"GFI classMethod1_result";
      }
      
      //instance methods
      - (NSString*)GFICinstanceMethod1:(NSString*)arg1 :(NSString*)arg2{
          printf("GFI instanceMethod1 called");
          
          self.GFICGlobalPropertyNSString1 = @"gfiGlobalPropertyNSString1_value";
          self.GFICLocalPropertyNSString2 = @"gfiLocalPropertyNSString2_value";
          
          
          return GFIC_GLOBAL_EXTERN_CONST_NSString_1;
      }
      
      - (void) GFICprintHelloWorld {
          NSLog(@"Hello World! from ObjC");
      }
      @end
      
      nm -U libObjCUtils.a
      //-U Don't display undefined symbols.
      

      输出由你的部​​分、地址、类型(内部或外部符号)名称组成,看起来像

      libObjCUtils.a(GFICClassA.o):
      0000000000000000 t +[GFICClassA GFICclassMethod1::]
      0000000000000290 t -[GFICClassA .cxx_destruct]
      00000000000001d0 t -[GFICClassA GFICGlobalPropertyNSString1]
      0000000000000230 t -[GFICClassA GFICLocalPropertyNSString2]
      00000000000000b0 t -[GFICClassA GFICinstanceMethod1::]
      00000000000001a0 t -[GFICClassA GFICprintHelloWorld]
      00000000000001f0 t -[GFICClassA setGFICGlobalPropertyNSString1:]
      0000000000000250 t -[GFICClassA setGFICLocalPropertyNSString2:]
      00000000000002e8 S _GFIC_GLOBAL_EXTERN_CONST_INT_1
      00000000000002f0 S _GFIC_GLOBAL_EXTERN_CONST_NSInteger_1
      0000000000000538 S _GFIC_GLOBAL_EXTERN_CONST_NSString_1
      0000000000000540 s _GFIC_LOCAL_STATIC_CONS_1
      00000000000008a8 S _OBJC_CLASS_$_GFICClassA
      0000000000000658 S _OBJC_IVAR_$_GFICClassA._GFICGlobalPropertyNSString1
      0000000000000660 S _OBJC_IVAR_$_GFICClassA._GFICLocalPropertyNSString2
      0000000000000880 S _OBJC_METACLASS_$_GFICClassA
      00000000000006b0 s l_OBJC_$_CLASS_METHODS_GFICClassA
      0000000000000718 s l_OBJC_$_INSTANCE_METHODS_GFICClassA
      00000000000007c8 s l_OBJC_$_INSTANCE_VARIABLES_GFICClassA
      0000000000000810 s l_OBJC_$_PROP_LIST_GFICClassA
      0000000000000838 s l_OBJC_CLASS_RO_$_GFICClassA
      00000000000006d0 s l_OBJC_METACLASS_RO_$_GFICClassA
      

      您可以找到样品here

      【讨论】:

      • 你为什么使用 libObjCUtils.a ?
      • @AdelaToderici,你有什么建议呢? .a 是一个静态库
      猜你喜欢
      • 1970-01-01
      • 2012-10-18
      • 2014-09-21
      • 1970-01-01
      • 2010-10-07
      • 2011-06-02
      • 1970-01-01
      • 2010-12-22
      • 2012-02-19
      相关资源
      最近更新 更多