gpt4 book ai didi

R::使用 Makevars 覆盖 C 编译器

转载 作者:行者123 更新时间:2023-12-04 21:08:48 27 4
gpt4 key购买 nike

我们的 R 安装定义为:

R$HOME/etc/Makeconf that CC = gcc -std=gnu99 

我有一个特定的包(C++ 和 C 代码的混合)需要使用
  CC = gcc  

没有 -std=gnu99
据我了解,我有 3 种方法来做到这一点:
1) 系统范围内,编辑 R$HOME/etc/Makeconf
2)每个用户,玩 ~/.R/Makevars
3) 以包为基础,设置 PACKAGE/src/Makevars

即使 1 和 2 不是我想要的,我也使用 1 和 2 测试了 3 个选项
R CMD INSTALL -l pack.tgz可以“gcc -std=gnu99”正确替换为“gcc”

但是当使用 PACKAGE/src/Makevars接近它失败

我必须承认我在这一点上迷路了,我应该去哪里看?

编辑。
这与 Building R Packages using Alternate GCC 不是真的重复
我肯定已经读过上一篇了。是那篇将我引向 Makevars 的

我最关心的是 包/src/Makevars 不考虑 CC=alternate 编译器,而其他编译器工作正常。

最佳答案

我在 fortran 中遇到了类似的问题。无论如何,我制作了您的包裹模型,并找到了一半的解决方案。似乎不是PACKAGE/src/Makevars中的所有变量被考虑和使用。为了使它工作,我使用了这个 Makevars文件:

MY_PKG_LIBS =
MY_PKG_CCLAGS = -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g

all: $(SHLIB)
hello.o: hello.c
gcc $(MY_PKG_CCLAGS) -c hello.c -o hello.o $(MY_PKG_LIBS)

PKG_LIB = -std=gnu++11

显然是 hello.c文件应替换为 your_file_name.c .如果不能改 CC你采用我的解决方法,真正的问题是当共享文件 .so创建后,编译器标志应该使用 PKG_CFLAGS 覆盖或 PKG_CPPFLAGSWriting R Extensions 中所述(再次在 Makevars 文件中)。在我的个人情况下(Ubuntu 15.04,R 3.1.2),我按照 /etc/R/Makeconf 中的指南尝试了这些和其他变量。文件:
ALL_CFLAGS = $(R_XTRA_CFLAGS) $(PKG_CFLAGS) $(CPICFLAGS) $(SHLIB_CFLAGS) $(CFLAGS)
ALL_CPPFLAGS = $(R_XTRA_CPPFLAGS) $(PKG_CPPFLAGS) $(CPPFLAGS) $(CLINK_CPPFLAGS)

唯一可以向 -shared 添加标志的方法包的最终编译是添加库链接器标志(正如我最初使用 Fortran 代码所做的那样) PKG_LIB = -std=gnu++11PACKAGE/src/Makevars .
我安装软件包的最终结果是:
Installing package into ‘/home/home/R/x86_64-pc-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
* installing *source* package ‘question1’ ...
** libs
gcc -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c hello.c -o hello.o
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o question1.so hello.o -std=gnu++11 -L/usr/lib/R/lib -lR
installing to /home/dgarolini/R/x86_64-pc-linux-gnu-library/3.1/question1/libs
** R
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (question1)

关于R::使用 Makevars 覆盖 C 编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39626028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com