无法为 window 构建包含 C++ 库的 R 包
R package containing C++ library cannot build for window
我正在尝试使用 Rcpp 编写 R 包。我成功地使其适用于 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)
为了在 MakefileWin
中制作 DLL,我使用:
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: warning: 'ANNdist annDist(int, ANNpoint, ANNpoint)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
perf.cpp:71:14: error: function 'void annResetStats(int)' definition is marked dllimport
我尝试了不同的方法,但我无法理解我究竟应该在这里做什么。
我也试过将所有源文件复制到 src 文件夹并有一个简单的 makewars 文件,然后我得到了不同的错误,例如:
compute_TE.o:compute_TE.cpp:(.text+0x8ad): undefined reference to `_imp___Z11annAllocPtsii'
我正在尝试使用 Rcpp 编写 R 包。我成功地使其适用于 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)
为了在 MakefileWin
中制作 DLL,我使用:
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: warning: 'ANNdist annDist(int, ANNpoint, ANNpoint)' redeclared without dllimport attribute: previous dllimport ignored [-Wattributes]
perf.cpp:71:14: error: function 'void annResetStats(int)' definition is marked dllimport
我尝试了不同的方法,但我无法理解我究竟应该在这里做什么。
我也试过将所有源文件复制到 src 文件夹并有一个简单的 makewars 文件,然后我得到了不同的错误,例如:
compute_TE.o:compute_TE.cpp:(.text+0x8ad): undefined reference to `_imp___Z11annAllocPtsii'