#import #include @interface Foo : NSObject @end @implementation Foo - (void)bar { NSLog(@"%@", self); } @end @interface Bar : NSObject @end @implementation Bar static int x; + (void)load { NSLog(@"%@", self); // NSLog(@"x=%d", x) printf("printf in [Bar load]\n"); x = 1; } - (void)dummy { NSLog(@"dummy bar x=%d", x); } @end __attribute__((constructor)) static void hmmge(int argc, char** argv) { // create a dummy blank function to be replaced to call OBJC load printf("hmmge=%p\n", hmmge); printf("hmmge argc=%d\n", argc); for (int i = 0; i < argc; i++) { printf(" hmmge argv[%d]=%s\n", i, argv[i]); } NSLog(@"hmmge in objc-c"); Bar *bar = [[Bar alloc] init]; [bar dummy]; } int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"Hello, World!"); Foo *foo = [[Foo alloc] init]; [foo bar]; } printf("argc=%d\n", argc); for (int i = 0; i < argc; i++) { printf(" argv[%d]=%s\n", i, argv[i]); } return 0; }