LINUX.ORG.RU

История изменений

Исправление 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=sharedhttps://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=sharedhttps://github.com/golang/go/issues/47788 (Go 1.18+)