Пакет R, содержащий библиотеку C++, не может быть собран для окна

Я пытаюсь написать пакет R, используя Rcpp. Мне удалось заставить его работать для Linux, но не для Windows.

Он содержит мои коды C++, а также другую библиотеку. Код доступен здесь: https://github.com/Healthcast/TransEnt/tree/devel-win

В Makevars.win вы можете видеть, что я запускаю MakefileWin для библиотеки:

PKG_CPPFLAGS = -Iann_1.1.2/include -I$(BOOSTLIB)
PKG_LIBS = -Lann_1.1.2/lib -lANN -lstdc++ 
OBJECTS= RcppExports.o compute_TE.o
all: before $(SHLIB)
before: annLib
annLib:
    (cd ann_1.1.2/src; make -f MakefileWin; make clean)

И для создания DLL в MakefileWin я использую:

ANNLIB = libANN.dll
LIBNAME = ANN
DLLFLAGS = -shared 
(other stuff)
$(LIBDIR)/$(ANNLIB): $(OBJECTS)
$(C++) $(DLLFLAGS) -o cyg${LIBNAME}.dll \
    -Wl,--out-implib=lib${LIBNAME}.dll.a \
    -Wl,--export-all-symbols \
    -Wl,--enable-auto-import \
    -Wl,--whole-archive $(OBJECTS) \
    -Wl,--no-whole-archive

Проблема в том, что я не могу создать DLL. Я получаю предупреждения и ошибки. (Но не в Linux), например:

ANN.cpp: 46: 9: предупреждение: «ANNdist annDist (int, ANNpoint, ANNpoint)» повторно объявлен без атрибута dllimport: предыдущий dllimport игнорируется [-Wattributes]

perf.cpp: 71: 14: ошибка: определение функции «void annResetStats (int)» помечено как dllimport

Я пробовал разные вещи, но у меня проблема с пониманием, что именно я должен здесь делать.

Я также попытался просто скопировать все исходные файлы в папку src и создать простой файл makewars, а затем получил разные ошибки, такие как:

calculate_TE.o:compute_TE.cpp:(.text+0x8ad): неопределенная ссылка на `_imp___Z11annAllocPtsii'


person Ghazale    schedule 07.12.2015    source источник


Ответы (1)