Golang пакет с использованием cgo - PullRequest
0 голосов
/ 20 апреля 2020

Я создаю оболочку Go для сторонней библиотеки C. Эта оболочка должна работать на Windows, Ma c и Linux.

Я использовал cgo, и оболочка отлично работает на всех трех платформ. Теперь для распространения пакет размещен в github. Я добавил следующие ldflags в коде:

/*
#cgo linux LDFLAGS: -L./libs -lMyLib -Wl,-rpath,./libs -Wl,-rpath,./
#cgo darwin LDFLAGS: -L./libs -lMyLib -Wl,-rpath,./libs -Wl,-rpath,./
#cgo windows LDFLAGS: -L./libs -lMyLib
#include "mylib/MyLib.h"
#include <stdlib.h>
*/
import "C"

Когда я пытаюсь go get -u github.com/mycompany/mylib-go в любом примере приложения go, это дает ошибку компоновки на всех трех платформах. Что-то вроде:

ld: library not found for -lMyLib

Я заметил, что для этого libMyLib.dylib, libMyLib.so и MyLib.dll должны присутствовать в рабочем каталоге примера приложения, а также в GOROOT/src/github.com/mycompany/mylib-go/libs, где пакет установлен.

Поэтому для компоновки во время сборки он ищет библиотеку в GOROOT/src/github.com/mycompany/mylib-go/libs, а во время выполнения ищет библиотеку в текущем рабочем каталоге.

Так что мне нужно для фиксации общих библиотек в моем репозитории git, и пользователям необходимо также включить библиотеку в свое приложение.

Этого можно как-то избежать, как, например, общая библиотека должна требоваться только в примере пользователей каталог приложения, и компоновщик будет использовать этот путь вместо его поиска в каталоге пакета?

...