首先,此解决方案是我自己遇到的,不代表普适,只是提供一种思路。我的C语言代码是直接嵌入go代码中的。
先看我的项目文档结构:include文件夹里是openssl的头文件,lib文件夹里是C的.lib文件,service文件里面go代码有C的调用。
service中的C代码调用部分代码如下:
/*
#cgo CFLAGS : -I../include
#cgo windows LDFLAGS: -L../lib -llibeay32 -lssleay32 -lWS2_32
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <errno.h>
#include <sys/types.h>
#include <winsock2.h>
#include "openssl/rsa.h"
#include "openssl/crypto.h"
#include "openssl/x509.h"
#include "openssl/pem.h"
#include "openssl/ssl.h"
#include "openssl/err.h"
...
...
*/
import C
可以看到CFLAGS是设置头文件路径,LDFLAGS是设置库文件。在配置这两个变量过程中,注意与自己的文件路径相对应,保证正确。尤其注意c代码注释完后紧跟import C ,不要在中间添加其他东西。这里的import C 实际上是伪包&#x