R语言中GCC编译的问题(续)

简介: 这篇文章承接R语言中GCC编译的问题,这篇文章主要解决我在Linux系统上安装"expm"出现的问题。出现的问题这个问题非常的有趣,因为我在两台服务器分别安装同一个包,其中一台没有任何问题,而另一台则失败,尽管操作系统都是“CentOS Linux release 7.4.1708 (Core)”。

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

img_e80471083e19d13c364a4cae456a87cb.png
出现的问题

这个问题非常的有趣,因为我在两台服务器分别安装同一个包,其中一台没有任何问题,而另一台则失败,尽管操作系统都是“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/

顺利安装!

目录
相关文章
|
2月前
|
Ubuntu Linux 编译器
Linux应用开发基础知识——交叉编译与gcc编译(一)
Linux应用开发基础知识——交叉编译与gcc编译(一)
63 0
Linux应用开发基础知识——交叉编译与gcc编译(一)
|
1月前
|
存储 编译器 Shell
Makefile语法基础
Makefile语法基础
8 0
|
11月前
|
Java 开发工具 Python
Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?
Python 静态分析Pylint、Pyflakes 与 Mypy ——我应该用谁?
123 0
|
Python
Python编程:设置Python解释器不生成字节码pyc文件
Python编程:设置Python解释器不生成字节码pyc文件
92 0
|
Python
python 通过 capstone 反汇编
Capstone是一个轻量级的多平台、多架构的反汇编框架,该模块支持目前所有通用操作系统,反汇编架构几乎全部支持。
197 0
python 通过 capstone 反汇编
|
移动开发 Java 索引
【Python基础】详解Python基础函数,包教包会
【Python基础】详解Python基础函数,包教包会
【Python基础】详解Python基础函数,包教包会
【Python基础】详解Python基础函数,包教包会(三)
【Python基础】详解Python基础函数,包教包会(三)
【Python基础】详解Python基础函数,包教包会(三)
|
存储 编译器 C语言
【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程(二)
【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程(二)
344 0
|
存储 自然语言处理 编译器
【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程(一)
【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程(一)
225 0
|
Python
Python学习笔记(15)-Python代码转换为exe可执行程序详解
本文目录 1. 简介 2. pyInstaller安装配置 2.1 下载PyInstaller 2.2 下载后解压PyInstaller 2.3 下载pywin32 2.4 安装pywin32 2.5 安装PyInstaller 3. 制作exe 3.1 编写python文件 3.2 将代码文件放至pyinstaller目录 3.3 制作exe 3.4 查看并运行exe 4. 兼容性问题 5. 其他方法制作exe
143 0
Python学习笔记(15)-Python代码转换为exe可执行程序详解