init()函数不能在共享库中运行吗?

问题描述 投票:-1回答:1

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

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

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

go shared-libraries
1个回答
0
投票

我尝试过:

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

所以在我看来,它可行。

© www.soinside.com 2019 - 2024. All rights reserved.