我有两个文件,属于不同的包
`
package tools
func Sub(a int, b int) int {
return a - b
}
func Add(a int, b int) int {
return a + b
}
`
`
package mathtools
func Sub(a int, b int) int {
return a - b + 3
}
func Add(a int, b int) int {
return a + b + 3
}
func Add1(a int, b int) int {
return a + b + 3
}
现在我使用 go tools compiler 编译两个文件输出两个.o文件,我发现linker里会把相同名字的覆盖掉,最后使用的时候也不是以包名作为 packange.xx来调用函数的,我想问这个是故意设计成这样还是我有哪些步骤漏了,我的代码是抄example的代码
package main
import (
"flag"
"fmt"
"net/http"
"os"
"runtime"
"strings"
"sync"
"unsafe"
"github.com/pkujhd/goloader"
)
type arrayFlags struct {
File []string
PkgPath []string
}
func (i *arrayFlags) String() string {
return "my string representation"
}
func (i *arrayFlags) Set(value string) error {
s := strings.Split(value, ":")
i.File = append(i.File, s[0])
var path string
if len(s) > 1 {
path = s[1]
}
i.PkgPath = append(i.PkgPath, path)
return nil
}
func main(){
var files arrayFlags
flag.Var(&files, "o", "load go object file")
var pkgpath = flag.String("p", "", "package path")
var parseFile = flag.String("parse", "", "parse go object file")
var run = flag.String("run", "tools.Add", "run function")
var times = flag.Int("times", 1, "run count")
var enableStringContainer = flag.Int("s", 1, "enable string container")
我有两个文件,属于不同的包 ` package tools func Sub(a int, b int) int { return a - b } func Add(a int, b int) int { return a + b }
`
` package mathtools func Sub(a int, b int) int { return a - b + 3 } func Add(a int, b int) int { return a + b + 3 } func Add1(a int, b int) int { return a + b + 3 }
现在我使用 go tools compiler 编译两个文件输出两个.o文件,我发现linker里会把相同名字的覆盖掉,最后使用的时候也不是以包名作为 packange.xx来调用函数的,我想问这个是故意设计成这样还是我有哪些步骤漏了,我的代码是抄example的代码
package main import ( "flag" "fmt" "net/http" "os" "runtime" "strings" "sync" "unsafe" "github.com/pkujhd/goloader" )type arrayFlags struct { File []string PkgPath []string }
func (i *arrayFlags) String() string { return "my string representation" }
func (i *arrayFlags) Set(value string) error { s := strings.Split(value, ":") i.File = append(i.File, s[0]) var path string if len(s) > 1 { path = s[1] } i.PkgPath = append(i.PkgPath, path) return nil }
func main(){ var files arrayFlags flag.Var(&files, "o", "load go object file") var pkgpath = flag.String("p", "", "package path") var parseFile = flag.String("parse", "", "parse go object file") var run = flag.String("run", "tools.Add", "run function") var times = flag.Int("times", 1, "run count") var enableStringContainer = flag.Int("s", 1, "enable string container")
}
func parse(file, pkgpath string) { if file == "" { flag.PrintDefaults() return } f, err := os.Open(file) if err != nil { fmt.Printf("%# v\n", err) return } obj, err := goloader.Parse(f, pkgpath) fmt.Printf("%# v\n", obj) f.Close() if err != nil { fmt.Printf("error reading %s: %v\n", file, err) return } } `