Ошибка доступа к клиенту aerospike C через Cgo - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь изучить Cgo, поэтому я попытался получить доступ к клиенту aerospike из Cgo

package main  
// #cgo CFLAGS: -g -Wall
// #include <stdlib.h>
// #include <string.h>
// #include "aerospike-client-c/examples/put/example_utils.h"
import "C"
import (
"unsafe"
)
func main() {  
   retvals := C.putitnew()
  _=retvals
}

Но я получаю ошибки ниже.(Пожалуйста, обратите внимание, что программа C работает успешно, когда я делаю make и make run).

undefined reference to `example_get_opts'
./aerospike-client-c/examples/put/example.c:66: undefined reference to 
`example_connect_to_aerospike'
./aerospike-client-c/examples/put/example.c:69: undefined reference to 
`example_remove_test_record'
./aerospike-client-c/examples/put/example.c:78: undefined reference to 
  `as_record_init'
./aerospike-client-c/examples/put/example.c:79: undefined reference to 
`as_record_set_int64'
/tmp/go-build283334635/b046/_x002.o: In function `as_record_set_str':
....

Так что я считаю, что проблема заключается в конфигурации в Makefile.Я искал весь день и пробовал много решений, но безуспешно.Можете ли вы помочь мне, как я могу импортировать Makefile в Cgo?Или альтернатива, чтобы помочь мне выполнить это успешно ..

1 Ответ

0 голосов
/ 08 октября 2018

Вам необходимо связаться с соответствующей библиотекой.Я считаю, что библиотека называется -laerospike.В этом случае директива cgo будет выглядеть следующим образом:

// #cgo LDFLAGS: -laerospike

См. документацию по cgo .

Более того, вам необходимо указать ссылку в соответствующем примерекод.Я не вижу put пример в официальном репозитории.Скорее всего, вам придется скопировать часть его источников непосредственно в раздел cgo вашего файла Go, поскольку примеры обычно не предназначены для прямых ссылок.

...