1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-23 20:02:22 +00:00

Merge pull request #477 from lewgun/patch-19

fix typo
This commit is contained in:
chai2010 2019-11-11 18:02:51 +08:00 committed by GitHub
commit a5c340d540
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -177,7 +177,7 @@ func add(a, b C.int) C.int {
add函数名以小写字母开头对于Go语言来说是包内的私有函数。但是从C语言角度来看导出的add函数是一个可全局访问的C语言函数。如果在两个不同的Go语言包内都存在一个同名的要导出为C语言函数的add函数那么在最终的链接阶段将会出现符号重名的问题。
CGO生成的 `_cgo_export.h` 文件包含导出后的C语言函数的声明。我们可以在纯C源文件中包含 `_cgo_export.h` 文件来引用导出的add函数。如果希望在当前的CGO文件中马上使用导出的C语言add函数则无法引用 `_cgo_export.h` 文件。因为`_cgo_export.h` 文件的生成需要依赖当前文件可以正常构建,而如果当前文件内部循环依赖还未生成的`_cgo_export.h` 文件将会导致cgo命令错误。
CGO生成的 `_cgo_export.h` 文件包含导出后的C语言函数的声明。我们可以在纯C源文件中包含 `_cgo_export.h` 文件来引用导出的add函数。如果希望在当前的CGO文件中马上使用导出的C语言add函数则无法引用 `_cgo_export.h` 文件。因为`_cgo_export.h` 文件的生成需要依赖当前文件可以正常构建,而如果当前文件内部循环依赖还未生成的`_cgo_export.h` 文件将会导致cgo命令错误。
```c
#include "_cgo_export.h"