这篇文章承接R语言中GCC编译的问题,这篇文章主要解决我在Linux系统上安装"expm"出现的问题。

出现的问题

这个问题非常的有趣,因为我在两台服务器分别安装同一个包,其中一台没有任何问题,而另一台则失败,尽管操作系统都是“CentOS Linux release 7.4.1708 (Core)”。不过我知道,一定还有一些差异我没有发现,有可能是R的版本不同,有可能是安装R所用的GCC版本不同,但是这种差异就算知道了也不像去解决,我可不想为了一个R包重装系统。

那么如何解决这个问题呢?策略就是手动安装了。

让我们先下载这个R包并解压

wget https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/contrib/expm_0.999-2.tar.gz
tar xf expm_0.999-2.tar.gz

然后找到locale.h中报错行, 也就是从libintl.h中调用的dgettext报错了

#include <R.h>
#ifdef ENABLE_NLS
#include <libintl.h>
#define _(String) dgettext ("expm", String)
#else
#define _(String) (String)
#endif

这个libintl.h凭我本能的直觉我认为是应该是在/usr/include/下, 使用VIM打开并查找"LC_MESSAGES"

...
/* We need LC_MESSAGES for `dgettext'.  */
# include <locale.h>
...

这行代码告诉我们这个"LC_MESSAGES"在locale.h下, 但是我发现在locale.h里面是有定义的

/* These are the possibilities for the first argument to setlocale.The code assumes that the lowest LC_* symbol has the value zero.  */
#define LC_CTYPE          __LC_CTYPE
#define LC_NUMERIC        __LC_NUMERIC
#define LC_TIME           __LC_TIME
#define LC_COLLATE        __LC_COLLATE
#define LC_MONETARY       __LC_MONETARY
#define LC_MESSAGES       __LC_MESSAGES
#define LC_ALL            __LC_ALL
#define LC_PAPER          __LC_PAPER
#define LC_NAME           __LC_NAME
#define LC_ADDRESS        __LC_ADDRESS
#define LC_TELEPHONE      __LC_TELEPHONE
#define LC_MEASUREMENT    __LC_MEASUREMENT
#define LC_IDENTIFICATION __LC_IDENTIFICATIO

于是我崩溃了。

突然间我灵机一闪,为啥不直接把这个定义添加到原来的locale.h里呢? 于是我在locale.h里增加了一行,改为

/* Localization */
#define LC_MESSAGES "en_US.UTF-8"
#include <R.h>
#ifdef ENABLE_NLS
#include <libintl.h>
#define _(String) dgettext ("expm", String)
#else
#define _(String) (String)
#endif

最后用R CMD INSTALL安装

 R CMD INSTALL  expm/

顺利安装!

R语言中GCC编译的问题(续)相关推荐

  1. R语言中Sweave是用来做什么的?

    R语言中Sweave是用来做什么的? 目录 R语言中Sweave是用来做什么的? R语言是解决什么问题的? R语言中Sweave是用来做什么的? 安利一个R语言的优秀博主及其CSDN专栏: R语言是解 ...

  2. 1071svm函数 r语言_如何利用R语言中的rpart函数建立决策树模型

    决策树是根据若干输入变量的值构造出一个适合的模型,以此来预测输出变量的值,并用树形结构展示出来.决策树主要有两个类别:分类树和回归树.分类树主要针对离散的目标变量,回归树则针对连续的目标变量.R语言中 ...

  3. r语言中c函数错误,R语言中c()函数与paste()函数的区别说明

    c()函数:将括号中的元素连接起来,并不创建向量 paste()函数:连接括号中的元素 例如 c(1, 2:4),结果为1 2 3 4 paste(1, 2:4),结果为"1 2" ...

  4. r语言中的shiny教程_如何使用Shiny在R中编写Web应用程序

    r语言中的shiny教程 新年快乐! 这个月我忙于撰写一些较大的文章,因此请在接下来的几周内查找这些文章. 对于本月的Nooks和Crannies,我想简要指出一个我一直在用它进行自我教育的出色R库. ...

  5. R语言中if语句使用方法之超详细教程

    在R语言中,if属于一种分支结构,即根据某个条件执行相关的语句.R中的if语句与else配合主要有3种结构. 单个if语句 if(cond) {expr} 其它语句 即当括弧中的cond条件为TRUE ...

  6. r语言中paste函数_R中的paste()函数-简要指南

    r语言中paste函数 Using the paste() function in R will be straight and simple. In this tutorial let's see ...

  7. r语言中的while循环_R编程中的While循环

    r语言中的while循环 In addition to the for loop we discussed earlier, R also offers another kind of loop to ...

  8. R语言中的igraph包绘制网络图

    本文转自网络. R语言中的igraph包可以很方便地画出网络图,在社交关系分析等领域发挥重要作用,下面介绍包中一个重要的函数graph_from_data_frame(). graph_from_da ...

  9. 相关系数pearson、spearman、kendall和R语言中的cor/or.test()

    相关系数pearson.spearman.kendall和R语言中的cor/cor.test 1. 相关系数pearson.spearman.kendall 2. R语言cor函数和cor.test函 ...

最新文章

  1. mysql 查询不使用索引_简单的mySQL查询不使用索引
  2. 让Windows下的Tomcat将控制台信息记录到日志
  3. android activity根节点addview_Activity问你4个问题,你敢回答吗?
  4. synchronized不能锁静态变量_多线程编程不可错过——彻底理解synchronized
  5. c++中#include“stdafx.h”
  6. 简单的相似图片搜索的原理
  7. Linux Oracle10g安装
  8. 查看mysql字段的编码_MySQL查看和修改字符编码的实现方法
  9. Uboot USB模式(RK3288变砖头的解决办法)
  10. C语言如何设计随机数
  11. linux下监控网络连接,Linux网络监控工具--netstat及网络连接分析
  12. mysql实战27 | 主库出问题了,从库怎么办?
  13. maven安装教程(保姆级别)
  14. t检验的p值对照表_第十讲 R-两独立样本t检验
  15. 不等缓和曲线计算公式及坐标?
  16. 下载图片 getInputStream、available()问题
  17. 能真正帮你实现沟通表达能力提升的书籍推荐:《沟通与说服必读12篇》
  18. matlab两幅图重叠,matlab两幅图叠在一起
  19. 分享一个超低功耗的4G智能模块
  20. office 2003打开错误,Microsoft office word遇到错误需要关闭

热门文章

  1. zabbix监控tomcat服务
  2. Python办公自动化(二)|从Excel到Word
  3. 利用css和js实现页面的标签效果。(标签个数可以动态变化)
  4. php asort,PHP asort() 函数
  5. 人工智能与python编程_人工智能用什么编程_python与人工智能编程
  6. 80端口未被占用,无法启动wamp的解决方法(原创)
  7. SpringBoot 启动失败 Failed to determine a suitable driver class 问题解决方案
  8. IDEA2019.3 双击启动无反应解决方法
  9. Android网络库的比较:OkHTTP,Retrofit和Volley [关闭]
  10. 通过wget在Linux上下载Java JDK会显示在许可证页面上