Создание C DLL и использование его в Golang? - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу создать DLL на C и использовать ее на Golang.

Я использовал этот урок для генерации dll: helloWorld.h

#include<stdio.h>
void __stdcall __declspec(dllexport) hello();

helloWorld.c

#include<stdio.h>
#include "helloWorld.h"
__stdcall void hello()
{
    printf("Hello World !!");
}

Я использовал это в командной строкечтобы скомпилировать

g++ -c helloWorld.c
g++ -shared -o helloWorld.dll helloWorld.o -Wl,--out-implib,libhelloWorld.a

Я смог использовать сгенерированную dll в этом C-коде с именем example.c:

#include<stdio.h>
#include "helloWorld.h"
int main()
{
    hello();
}

и скомпилировать с помощью

g++ -c example.c
g++ -o example.exe example.o -L. -lhelloWorld

Но при использовании DLL на Голанге я получаю сообщение об ошибке, пожалуйста, помогите мне

test.go

package main 

/*
#cgo LDFLAGS: -L. -lhelloWorld
#include "helloWorld.h"
*/
import "C"

func main(){

    C.hello()
}

Ошибка:

# command-line-arguments
C:\Users\kumarmoh\AppData\Local\Temp\go-build544493490\b001\_x002.o: In function `_cgo_525f579e070a_Cfunc_hello':
/tmp/go-build/cgo-gcc-prolog:40: undefined reference to `hello'
collect2.exe: error: ld returned 1 exit status 

error image

Другая информация:

  1. go версия go1.11 windows / amd64

  2. 64-bitОС, x64-процессор, Windows 10

  3. Я попытался создать dll в Visual studio, и это дало мне ошибку, как объяснено здесь .

...