У меня есть сторонняя библиотека C ++ .so , которую я хочу использовать в моем коде Go .Я могу заставить его работать с простым C / C ++, но не могу подключиться к Go.
Библиотека имеет большой заголовочный файл, и нужная мне функция объявлена в ней так (переименовано для более простого вида):
typedef unsigned long (*INTERFACE_EXAMPLE_FUNC)(int example_var);
#ifdef PC_STATIC_LIBS
extern "C" unsigned long Example_func(int example_var);
#endif //PC_STATIC_LIBS
(я полагаю, проще связать статическую библиотеку, поэтому я помещаю #define PC_STATIC_LIBS поверх заголовка)
Я провел много часовпытаясь связать эту библиотеку без SWIG, но cgo не будет анализировать заголовок C ++, что дает мне массу сообщений об ошибках.Итак, я пытаюсь использовать SWIG сейчас.В настоящее время мой файл интерфейса Swig example.i выглядит следующим образом:
%module example
%{
#include "libheader.h"
extern unsigned long Example_func(int example_var);
%}
extern unsigned long Example_func(int example_var);
Шаги, которые я предпринимаю:
- Запустить команду swig:
swig -go -cgo -c++ -intgosize 64 -use-shlib -soname examplelib.so example.i
go install
Полученные результаты:
/usr/bin/ld: $WORK/b001/_x003.o: in function `_wrap_Example_func_examplelib_8c0447b5964daffe':
./examplelib_wrap.cxx:302: undefined reference to `Example_func'
collect2: error: ld returned 1 exit status
Все используемые файлы находятся втот же каталог.У меня также есть копия библиотеки, размещенная в моем / usr / local / lib, и ldconfig -p
показывает ее.
Что я здесь не так делаю?