# command-line-arguments
duplicate symbol _StartApp in:
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/main.cgo2.o
duplicate symbol _OBJC_METACLASS_$_GoPasser in:
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/main.cgo2.o
duplicate symbol _OBJC_CLASS_$_GoPasser in:
$WORK/command-line-arguments/_obj/_cgo_export.o
$WORK/command-line-arguments/_obj/main.cgo2.o
ld: 3 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
-
-
Save chai2010/5cb8465735af751c9dd32a620300aeb5 to your computer and use it in GitHub Desktop.
Golang cgo objective-c cocoa button callback
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Cocoa/Cocoa.h> | |
extern void ButtonClick(void); | |
@interface GoPasser : NSObject | |
+ (void)buttonClick:(id)sender; // this should call the cgo function defined in main.go | |
@end | |
void StartApp(void); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "c.h" | |
@implementation GoPasser | |
+ (void)buttonClick:(id)sender{ | |
ButtonClick(); // this should call the cgo function defined in main.go | |
} | |
@end | |
// GoPasser's buttonClick: gets called in here | |
void StartApp(void){ | |
[NSAutoreleasePool new]; | |
[NSApplication sharedApplication]; | |
[NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; | |
id menubar = [[NSMenu new] autorelease]; | |
id appMenuItem = [[NSMenuItem new] autorelease]; | |
[menubar addItem:appMenuItem]; | |
[NSApp setMainMenu:menubar]; | |
id appMenu = [[NSMenu new] autorelease]; | |
id appName = [[NSProcessInfo processInfo] processName]; | |
id quitTitle = [@"Quit " stringByAppendingString:appName]; | |
id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle | |
action:@selector(terminate:) keyEquivalent:@"q"] | |
autorelease]; | |
[appMenu addItem:quitMenuItem]; | |
[appMenuItem setSubmenu:appMenu]; | |
NSRect buttonFrame = NSMakeRect(59, 33, 82, 32); | |
NSButton *button = [[NSButton alloc] initWithFrame:buttonFrame]; | |
button.bezelStyle = NSRoundedBezelStyle; | |
button.title = @"Click Me!"; | |
[button setTarget:[GoPasser class]]; | |
[button setAction:@selector(buttonClick:)]; | |
NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 200, 100) | |
styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]; | |
[window cascadeTopLeftFromPoint:NSMakePoint(20,20)]; | |
[window setTitle:appName]; | |
[window makeKeyAndOrderFront:nil]; | |
[window.contentView addSubview:button]; | |
[NSApp activateIgnoringOtherApps:YES]; | |
[NSApp run]; | |
return; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
/* | |
#cgo CFLAGS: -x objective-c | |
#cgo LDFLAGS: -framework Cocoa | |
#include "c.m" | |
*/ | |
import "C" | |
import "fmt" | |
//export ButtonClick | |
func ButtonClick() { | |
fmt.Println("Button Click!") | |
} | |
func main() { | |
C.StartApp() | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
it's none of go nor objectivec's business.
Why include c.m ?
you should include c.h instead.
this is what happens after modify.