почему выдаёт ошибку go: no Go source files с использованием библиотеки C
package main
import (
"fmt"
"C"
)
//export Sum
func Sum(a, C.int, b C.int) C.int {
fmt.Printf("go program")
return a + b
}
func main(){}
при вводе команды go build -o sum.dll -buildmode=c-shared examp.go выдаёт ошибку:
go: no Go source files
я пытался переносить код в файл main.go, всё аналогично
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Это расширенный комментарий.
Если коротко, то ваша программа успешно (после небольшой правки) скомпилирована и вызвана из Си.
Развёрнуто.
- Тулчейн Го: go version go1.24.2 windows/amd64
- Тулчейн Cи: MSYS2 gcc (ucrt64/mingw-w64-ucrt-x86_64-gcc 14.2.0-2 (mingw-w64-ucrt-x86_64-toolchain))
Файлы
examp.go
package main
import (
"C"
"fmt"
)
//export Sum
func Sum(a C.int, b C.int) C.int {
fmt.Println("-> go program")
return a + b
}
func main() {}
main.c
#include <windows.h>
#include <stdio.h>
#include "sum.h"
typedef int (*SumFunc)(int, int);
int main() {
HMODULE hDll = LoadLibrary("sum.dll");
if (!hDll) {
// Тексты на английском, чтобы не было проблем с кодировкой терминала
printf("Error loading DLL\n");
return 1;
}
SumFunc Sum = (SumFunc)GetProcAddress(hDll, "Sum");
if (!Sum) {
printf("Function Sum not found\n");
FreeLibrary(hDll);
return 1;
}
printf("Calling function Sum\n");
int result = Sum(2, 3);
printf("Sum(2, 3) = %d\n", result);
FreeLibrary(hDll);
return 0;
}
Сборка
go build -o sum.dll -buildmode=c-shared examp.go
Сгенерированы sum.dll и sum.h
gcc main.c -o main.exe
Запуск .\main.exe:
Calling function Sum
-> go program
Sum(2, 3) = 5
Видно, что го-функция Sum успешно вызвана из Си.