Makevars中没有读取 LDFLAGS.在构建Rcpp包时获胜



简短明了:

我正在写一个使用zlib和sqlite的Rcpp包。

在下面的Makevars.win文件中,我设置了编译器标志并尝试设置一些目标。

PKG_CPPFLAGS=-I. -I./lib/sqlite/ -fopenmp -march=native -g -O2 -msse2 -fstack-protector -mfpmath=sse
-DRSQLITE_USE_BUNDLED_SQLITE 
-DSQLITE_ENABLE_RTREE 
-DSQLITE_ENABLE_FTS3 
-DSQLITE_ENABLE_FTS3_PARENTHESIS 
-DSQLITE_ENABLE_FTS5 
-DSQLITE_ENABLE_JSON1 
-DSQLITE_ENABLE_STAT4 
-DSQLITE_SOUNDEX 
-DRCPP_DEFAULT_INCLUDE_CALL=false 
-DRCPP_USING_UTF8_ERROR_STRING 
-DBOOST_NO_AUTO_PTR 
-DSQLITE_MAX_LENGTH=2147483647 
-DHAVE_USLEEP=1
PKG_CXXFLAGS=$(CXX_VISIBILITY)
PKG_CFLAGS=$(C_VISIBILITY)
LDFLAGS=-fstack-protector
PKG_LIBS = lib/sqlite/sqlite3.o lib/zlib/adler32.o lib/zlib/compress.o lib/zlib/crc32.o lib/zlib/deflate.o lib/zlib/gzclose.o lib/zlib/gzlib.o lib/zlib/gzread.o lib/zlib/gzwrite.o lib/zlib/infback.o lib/zlib/inffast.o lib/zlib/inflate.o lib/zlib/inftrees.o lib/zlib/trees.o lib/zlib/uncompr.o lib/zlib/zutil.o  #-Llib/sqlite/ -lsqlite3
.PHONY: all
all: $(SHLIB)
$(SHLIB): $(PKG_LIBS)

(强调-fstack-protector标志)

尽管如此,构建窗口中的链接器行是:
C:/rtools40/mingw64/bin/g++ -std=gnu++11 -shared -s -static-libgcc -o OptiLCMSmzDB.dll tmp.def RcppExports.o base64.o mzDBReader.o mzDBWriter.o mzMLReader.o query_mzDB.o spectrum.o lib/sqlite/sqlite3.o lib/zlib/adler32.o lib/zlib/compress.o lib/zlib/crc32.o lib/zlib/deflate.o lib/zlib/gzclose.o lib/zlib/gzlib.o lib/zlib/gzread.o lib/zlib/gzwrite.o lib/zlib/infback.o lib/zlib/inffast.o lib/zlib/inflate.o lib/zlib/inftrees.o lib/zlib/trees.o lib/zlib/uncompr.o lib/zlib/zutil.o -LC:/PROGRA~1/R/R-40~1.4/bin/x64 -lR

有点长,但请注意,我们最喜欢的旗帜不见了。结果,链接器向我展示了以下数百个实例:

对' __stack_chk_fail' '的未定义引用

我在windows 10上使用rtools40-std=gnu++11编译

我将非常感谢任何建议。

这里有很多东西需要我们分解。

首先,您设法让SHLIB使用目标文件的枚举列表。好!我最近不得不做同样的事情,我使用了OBJECTS列表。我认为你可能得到幸运,如果你把-fstack-protectorPKG_LIBS,因为PKG_*变量有你的默认使用扩展(在隐藏的Makefile由R控制)。LDFLAGS可能会被忽略。

否则,我建议在4000多个CRAN包中使用已编译的代码进行采样。有些会设置类似的东西,搜索时用"CRAN"在GitHub是粗糙的,但比nuttin'好。好运!

编辑:你可以看看我的(更复杂的)Makevars.win为RInside。我只是在这里的所有仓库中搜索了一下,我没有一个在Windows上设置-fSOMETHING的当前示例。

编辑2:我确实有一个更好的例子给你。每个RcppArmadillo包都使用

PKG_CXXFLAGS = -I../inst/include -I. $(SHLIB_OPENMP_CXXFLAGS) 
PKG_LIBS = $(SHLIB_OPENMP_CXXFLAGS) $(LAPACK_LIBS) $(BLAS_LIBS) $(FLIBS)

,其中(r系统级变量)SHLIB_OPENMP_CXXFLAGS展开为-fopenmp。所以我真的认为你需要PKG_LIBS如上所述。

相关内容

  • 没有找到相关文章

最新更新