Я пытаюсь использовать внешнюю библиотеку C с моей программой Go.Cgo include archive .a file
Я попытался следующие:
package cgoexample
/*
#include <stdio.h>
#include <stdlib.h>
#cgo CFLAGS: -I/Users/me/somelib/include
#cgo LDFLAGS: /Users/me/somelib/libhello.a
#include "stinger.h"
void myprint(char* s) {
printf("%s", s);
}
*/
import "C"
import "unsafe"
//... more here
В /Users/me/somelib/include
есть .h файл и в libhello.a
есть файл .o (я проверил с помощью команды ar
), который имеет определенные функции, в файле .h.
кажется, что .h файлы быть связаны в порядке, но это не выглядит как файл архива быть связаны между собой. Я продолжаю получать:
warning: 'some_method_in_my_h_file" declared 'static' but never defined
И эти предупреждения рассматриваются как ошибки. Несмотря на это, они должны быть реализованы в архиве, поэтому я смущен тем, что я делаю неправильно.
Когда я бегу go build
и gun run
.
У меня есть чувство, моя #cgo
команда недействительна (я не эксперт C),
Вы можете добавить определения функций/деклараций? если объявленные thoses являются статическими, они должны быть определены и использоваться в файле, где они были объявлены. 'static' в определении функции сообщает компилятору не экспортировать вашу функцию за пределы файла. – tomahh