Как я могу поделиться кодом c между пакетами go? - PullRequest
1 голос
/ 28 июня 2019

как поделиться кодом C между пакетами?Когда я пытаюсь включить заголовочный файл из другого пакета, я получаю:

Undefined symbols for architecture x86_64:
  "_module2_c_func", referenced from:
      __cgo_b9b83c92221d_Cfunc_module2_c_func in _x002.o
     (maybe you meant: __cgo_b9b83c92221d_Cfunc_module2_c_func)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Мой код:

main.go:

package main
import (
    "cgo_sample/module1"
    "cgo_sample/module2"
)
func main() {
    module1.Module1_invoke_c_func()
    module2.Module2_invoke_c_func()
}

module1 / module1.go:

package module1
/*
    #include "../module2/module2.h"
 */
import "C"
func Module1_invoke_c_func() int {
    return int(C.module2_c_func())
}

module2 / module2.go:

package module2
/*
  #cgo CFLAGS: -g -Wall
  #include "module2.h"
*/
import "C"
func Module2_invoke_c_func() int {
    return int(C.module2_c_func())
}

module2 / module2.h:

 #ifndef _MODULE1_H_
 #define _MODULE1_H_
   int module2_c_func();
 #endif

module2 / module2.c:

 #include "module2.h"
int module2_c_func() {
    return 12;
}
...