【问题标题】:init() function not run in shared library?init() 函数不在共享库中运行?
【发布时间】:2020-02-17 11:25:02
【问题描述】:

我正在用-buildmode=c-shared 构建我的包,发现导入包中的init() 函数似乎没有运行。这是预期的行为,错误还是我只是愚蠢? 我在 linux/amd64 上使用 go1.13.7。有问题的函数如下所示:

func init() {
    jsonrpc.HandleFunc("create-context", ContextHandler)
}

jsonrpc 是我编写的一个包,该函数将一个条目添加到那里的未导出的全局映射中。

【问题讨论】:

    标签: go shared-libraries


    【解决方案1】:

    我试过了:

    package main
    
    import "C"
    
    import "fmt"
    
    func init() {
            fmt.Println("in init")
    }
    
    //export Yo
    func Yo() {
            fmt.Println("that's what's up")
    }
    
    func main() {
            fmt.Println("vim-go")
    }
    

    go build -buildmode=c-shared lib.go 我得到了一个lib.h

    #include <stdio.h>
    #include "lol.h"
    
    int main() {
        Yo();
    }
    

    我编译时使用:gcc -o client main.c ./lib.so

    我得到了一个:

    in init
    that's what's up
    

    所以在我看来它有效。

    【讨论】:

    • 您是否尝试过在 init() 函数中进行一些调试打印以查看它是否被调用?
    • 当有人提出正确的问题时,它真的很有帮助!该软件包未在任何地方导入。我现在可以使用它了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多