• David Crawshaw's avatar
    cmd/interal/ld: darwin c-archive buildmode support · ced7ffe9
    David Crawshaw authored
    Uses ar to create an archive when -buildmode=c-archive.
    
    A small example (that I hope to turn into a test in a later CL):
    
    goarchive.go:
    	package main
    
    	import "fmt"
    
    	import "C"
    
    	func init() {
    		fmt.Println("ran go init")
    	}
    
    	//export FuncInGo
    	func FuncInGo() {
    		fmt.Println("called a go function")
    	}
    
    	func main() {
    		fmt.Println("in main")
    	}
    
    This can be compiled with:
    
    	go build -ldflags=-buildmode=c-archive -o=libgo.a goarchive.go
    
    main.c:
    
    	#include <stdio.h>
    
    	extern void FuncInGo();
    
    	int main(void) {
    		printf("c hello\n");
    		FuncInGo();
    		printf("c goodbye\n");
    		return 0;
    	}
    
    Can be compiled with:
    
    	cc main.c libgo.a
    
    Apple provide a warning about the lack of PIE, but still produce a
    binary which runs and outputs (on darwin/amd64):
    
    	c hello
    	ran go init
    	called a go function
    	c goodbye
    
    Change-Id: I7611925f210a83afa6bd1e66a5601dd636a428c8
    Reviewed-on: https://go-review.googlesource.com/8711Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    ced7ffe9
Name
Last commit
Last update
..
asm Loading commit data...
gc Loading commit data...
goobj Loading commit data...
ld Loading commit data...
obj Loading commit data...
objfile Loading commit data...
rsc.io Loading commit data...