Size: a a a

Golang Developers — русскоговорящее сообщество

2021 April 18

EU

Egor Urvanov in Golang Developers — русскоговорящее сообщество
Привет. Я пишу на golang. Понадобилось скомпилить всё в *.so. Сделал (https://medium.com/swlh/build-and-use-go-packages-as-c-libraries-889eb0c19838). Но при вызове из C, вот что получается:

bash: ./a.out: cannot execute binary file: Exec format error



Пример

ferret.go:
package main

import "C"
import (
 "math/rand"
 "time"
)

//export cgoCurrentMillis
func cgoCurrentMillis() C.long {
 return C.long(time.Now().Unix())
}

//export cgoSeed
func cgoSeed(m C.long) {
 rand.Seed(int64(m))
}

//export cgoRandom
func cgoRandom(m C.int) C.int {
 return C.int(rand.Intn(int(m)))
}

func main() {

}


Кладу рядом ferret.h:

extern long int cgoCurrentMillis();
extern void cgoSeed(long int m);
extern int cgoRandom(int m);


Далее делаю так:

go build -buildmode c-shared -o ferret.so .


Затем создаю файлик:

#include <stdio.h>
#include <ferret.h>

int main(void) {
   cgoSeed(cgoCurrentMillis());

   printf("Hello World from C!\n");
//    printf("cgoRandom() -> %d\n", cgoRandom(256));
   return 0;
}


Теперь:

gcc -c -I. -L./ferret.so -o a.out main.c 


Дальше:

chmod 777 a.out
./a.out


На что получаю:

bash: ./a.out: cannot execute binary file: Exec format error



Как решить проблему?
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
у тебя походу с си проблемы а не с го
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
компилишь и запускаешь и го и си на кодном компе в одно месте?
источник

EU

Egor Urvanov in Golang Developers — русскоговорящее сообщество
Ага.
источник

EU

Egor Urvanov in Golang Developers — русскоговорящее сообщество
Я неправильно линковал. Поправил, но возникла другая проблема

gcc -I. -L. -l ferret -o a.out main.c

/usr/bin/ld: cannot find -llibferret.so
collect2: error: ld returned 1 exit status
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
все еще с го не связана ошибка :)
источник

EU

Egor Urvanov in Golang Developers — русскоговорящее сообщество
Да, понятно
источник

A

Alexander in Golang Developers — русскоговорящее сообщество
so либу не надо положить в нужное место или добавит пути ?
не помню что бы оно само в систему укладывалось
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
если в одной папке то должно видеть
источник

EU

Egor Urvanov in Golang Developers — русскоговорящее сообщество
Я забил на это. Мне под питон надо. Под питон всё завелось.
источник

A

Alexander in Golang Developers — русскоговорящее сообщество
"Арфы нет, возмите бубен" )
источник

СШ

Слышал Шорохи... in Golang Developers — русскоговорящее сообщество
Что то туплю, не понимаю почему хром не сохраняет куку
источник

СШ

Слышал Шорохи... in Golang Developers — русскоговорящее сообщество
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Expires
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Укажи время жизни
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Хотя вру, там вроде как день
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
Откуда скрин?
источник

СШ

Слышал Шорохи... in Golang Developers — русскоговорящее сообщество
soapui
источник

А

Анатолий in Golang Developers — русскоговорящее сообщество
А в хроме такой есть?
источник

СШ

Слышал Шорохи... in Golang Developers — русскоговорящее сообщество
ща пересобиру сделаю
источник