История изменений
Исправление thegoldone, (текущая версия) :
Го, магический комментарий имеет значение
package main
import "C"
//export SlowSqrt
func SlowSqrt(nbr C.int) (i C.int) {
i = 1
for i < nbr {
if nbr/i == i {
return i
}
i++
}
return 0
}
func main() {}
go build -buildmode=c-shared
mv -v slowsqrt libslowsqrt.so
Си
#include "slowsqrt.h"
#include <stdio.h>
int main(void) {
printf("Number %d", SlowSqrt(2147483646));
return 0;
}
gcc -L. -I. main.c -l slowsqrt
Запуск
LD_LIBRARY_PATH=. ./a.out
Примеры – https://github.com/vladimirvivien/go-cshared-examples
Удаление -buildmode=shared
– https://github.com/golang/go/issues/47788 (Go 1.18+)
Исходная версия thegoldone, :
Го, магический комментарий имеет значение
package main
import "C"
//export SlowSqrt
func SlowSqrt(nbr C.int) (i C.int) {
i = 1
for i < nbr {
if nbr/i == i {
return i
}
i++
}
return 0
}
func main() {}
go build -buildmode=c-shared
mv -v slowsqrt libslowsqrt.so
Си
#include "slowsqrt.h"
#include <stdio.h>
int main(void) {
printf("Number %ld", SlowSqrt(2147483646));
return 0;
}
gcc -L. -I. main.c -l slowsqrt
Запуск
LD_LIBRARY_PATH=. ./a.out
Примеры – https://github.com/vladimirvivien/go-cshared-examples
Удаление -buildmode=shared
– https://github.com/golang/go/issues/47788 (Go 1.18+)