Код: Выделить всё
# uname -a
Linux 5.14.0-284.25.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 20 09:11:28 EDT 2023 x86_64 x86_64 x86_64 GNU/Linux
< /code>
Для локального тестирования на Mac я просто генерирую двоичный файл, используя go build -o libmybinary.so -buildmode = c -shefared main.go, но чтобы скомпилировать его в правильном формате для хоста, я использую это вместо этого: < /p>
FROM source as builder
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o libmybinary.so -buildmode=c-shared main.go
1.553 # runtime/cgo
1.553 gcc: error: unrecognized command line option '-m64'
------
ERROR: failed to solve: process "/bin/bash -eo pipefail -c CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o libmybinary.so -buildmode=c-shared main.go" did not complete successfully: exit code: 1
< /code>
Я также пытался заменить < /p>
FROM source as builder
RUN CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o libmybinary.so -buildmode=c-shared main.go
< /code>
с < /p>
FROM --platform=linux/amd64 source as builder
RUN go build -o libmybinary.so -buildmode=c-shared main.go
< /code>
И, похоже, он составляет .so в правильном формате для хоста, но мой код Java не мог найти экспортируемые методы, так как я думаю, что этот путь, по сути, не «кросскомпиляция» в нативном изображении, что приводит к различиям в поведении с CGO и основным набором C.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... ing-docker