glibc

Ubuntu16.4:基于alpine使用Dockerfile创建JDK8镜像

早过忘川 提交于 2019-12-26 18:05:20
alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。 2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息 3.Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小 对比常用的、没有压缩过的基础镜像(查看当前的:latest标签): Alpine - 4.8MB Ubuntu - 124.8 MB Debian - 125.1MB Centos - 196MB 4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本 alpine:3.10 基于alpine使用Dockerfile创建jdk8镜像 1.下载镜像 docker pull alpine:latest 2.创建Dockerfile并编辑Dockerfile(在你有jdk jar包中的文件夹内创建,如果有Dockerfile了直接把里面的内容删掉重新编辑即可,不会影响上次镜像的使用 ) vim

Linux C++ 应用二进制兼容实践

老子叫甜甜 提交于 2019-12-26 11:18:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文将介绍一些在开发多 Linux 平台 C++ 应用时可能遇到的兼容性问题和相关的解法。虽然是以 C++ 为讲述对象,但兼容性这个问题,在没有 VM 帮你做这些脏活累活的情况下,是所有 C-like 语言(比如 Go、Rust 等)都可能遇到的。 受个人经验所限,本文所讨论内容仅限于 x86 架构下,但相信相关的原理和规则在其他架构下也是相通的,可作借鉴参考。 Linux 二进制兼容 首先,我们来看看什么叫二进制兼容? 众所周知,不同的 Linux 发行版会携带不同的基础库版本,以最常用的 g++ 工具链为例,基于它们的应用会附带地依赖上 libc, libgcc, libstdc++ 等库。显然,当应用使用了高版本才具备的功能后,编译得到的二进制内容在低版本环境中运行时,将产生兼容问题,最常见的表现就是 无法运行 。 简而言之,当所提供的应用 binary 在目标平台上无法正常运行(包括跑不起来这种最差的情况),我们就认为这是一种不兼容的情况。 多平台兼容的常用方法 为了让应用兼容多平台,从开发者的角度一般有以下三个方法 [1] 。 1. 为每个目标平台提供特定的 Binary 顾名思义,对于每个目标平台,这种方法都要提供相应的 binary。 这种方法的好处在于每个 binary

kubernetes日志收集

谁说我不能喝 提交于 2019-12-25 23:59:54
kubernetes的日志收集 日志收集在本篇文章中主要分2种方案 需要明确的是,kubernetes里对容器日志的处理方式,都叫做cluster-level-logging。 对于一个容器来说,当应用日志输出到stdout和stderr之后,容器项目在默认情况下就会把这些日志输出到宿主机上的一个JSON文件里。这样就能通过kubectl logs查看到日志了。 两种方案分别以Daemonset和sidecar模式部署 DaemonSet方式在每个节点只允许一个日志agent,相对资源占用要小很多,每个pod不能单独配置,可定制性较弱,比较适用于功能单一或业务不是很多的集群; Sidecar方式为每个POD单独部署日志agent,相对资源占用较多,每个pod可单独配置,可定制性强,建议在大型的K8S集群或多个业务方服务的集群使用该方式。 第一种   在Node上部署logging-agent,将日志文件发送到后端保存起来。   实际上这种模式的核心就是将logging-agent以Daemonset的方式运行在节点上,然后将宿主机上的容器日志挂载进去,最后由logging-agent把日志发送出去。   这种工作模式最大的有点,在于一个节点只需要部署一个agent,并且不会对应用和pod有任何的入侵。   在这里,我们通过fluentd作为logging

Double Free - crash or no crash

橙三吉。 提交于 2019-12-25 19:03:59
问题 Can someone explain me why freeing a twice in a row causes a crash, but freeing a first, then b, and then a again does not crash? I know that a free will insert the heap chunk in a double linked free list. Freeing twice would insert the same chunk twice in the free list. But why is the crash happening? int *a = malloc(8); int *b = malloc(8); free(a); // free(a); //Would crash! free(b); free(a); //No crash 回答1: Because in C lingo, undefined behavior is just that: undefined. Anything might

Linux编译安卓代码的基本环境

依然范特西╮ 提交于 2019-12-25 15:51:20
Linux服务器编译安卓代码的基本环境 开发安卓最主要的开发工具就是Android Studio,而AndroidStudio的编译工具就是Gradle,因此Gradle是必不可少的;另外Android开发所依赖的开发工具包也是必不可少的。现在就开始准备这两个东西。 SDK sdk:软件开发工具包(缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。 下载 cd /opt wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip unzip sdk-tools-linux-3859397.zip mkdir sdk mv tools/ sdk/ 环境变量 vim /etc/profile export ANDROID_HOME=/opt/sdk export PATH=${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}:${PATH} source /etc/profile sdkmanager --list 如果报错是因为没有jdk Gradle 关于gradle的选择:

How to run GUI via remort server

余生长醉 提交于 2019-12-25 08:57:10
问题 I'm using Qtcreator to make GUI. Ideally, I build the project in my local pc (CentOS virtual terminal), and move it to remort server(CentOS). Finally, I want to run it in windows system via X server(VcXsrv i use). As operation verification, I create a new file and build as it is. At first, it generates many errors in remort server, such as " ./test: /lib64/libc.so.6: version GLIBC_2.14 not found (required by /users/my/Qt/5.9.1/gcc_64/lib/libQt5Gui.so.5) ". I don't have root permission and can

What does constitute one character for regcomp? Which multibyte encoding does determine this?

血红的双手。 提交于 2019-12-25 07:51:02
问题 regcomp (from glibc) is a POSIX function for compiling regular expressions. int regcomp(regex_t *restrict preg, const char *restrict pattern, int cflags); There are some constructions in regular expressions which depend on the idea of a single character, for example [abc] . If a multibyte encoding is used and a multibyte letter is used in the expression, the interpretation would be different if it treated either as a byte-sequence or a sequence of multibyte letters. Here I illustrate this

linux上wps2019不能启动解决方法

徘徊边缘 提交于 2019-12-25 03:38:38
本人linux上的wps2016升级成wps2019后启动不了,双击图标没反应,在命令行输入wps,提示"/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)",此为GLIBC版本过低,即wps2019编译时使用了较高版本的glibc,而系统并不支持(可以用strings命令查看下系统中的GLIBC版本strings /lib64/libc.so.6 | grep GLIBC)。 解决方法: 下载新版的glibc:wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.18.tar.gz 解压:tar -xf glibc-2.18.tar.gz 进入解压文件夹,创建文件夹build并进入: mkdir build cd build 然后执行: ../configure --prefix=/usr make -j4 make install (该过程花费时间至少5分钟,请做好心理准备),问题解决。 备注:升级GLIBC有风险,系统可能瘫痪,参考: https://www.cnblogs.com/dartagnan/archive/2013/04/25/3042105.html 或https://blog.csdn.net

linux上wps2019不能启动解决方法

做~自己de王妃 提交于 2019-12-25 03:38:25
本人linux上的wps2016升级成wps2019后启动不了,双击图标没反应,在命令行输入wps,提示"/lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)",此为GLIBC版本过低,即wps2019编译时使用了较高版本的glibc,而系统并不支持(可以用strings命令查看下系统中的GLIBC版本strings /lib64/libc.so.6 | grep GLIBC)。 解决方法: 下载新版的glibc:wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.18.tar.gz 解压:tar -xf glibc-2.18.tar.gz 进入解压文件夹,创建文件夹build并进入: mkdir build cd build 然后执行: ../configure --prefix=/usr make -j4 make install (该过程花费时间至少5分钟,请做好心理准备),问题解决。 备注:升级GLIBC有风险,系统可能瘫痪,参考:https://www.cnblogs.com/dartagnan/archive/2013/04/25/3042105.html 或https://blog.csdn.net/sole

Undefine a function-like macro in C?

时光怂恿深爱的人放手 提交于 2019-12-25 02:50:14
问题 I am trying to do some hacks over the glibc, and I wanted to know whether it's possible to redefine function-like macros ? For example, <tgmath.h> has the following macro: #define expm1(Val) __TGMATH_UNARY_REAL_ONLY (Val, expm1) How to redefine expm1 as : #define expm1(Val) __TGMATH_UNARY_REAL_IMAG (Val, expm1, cexpm1) I suppose that I have to cancel the previous definition but I do not know exactly how to do that. 回答1: Exactly. Just undefine it first. #ifdef expm1 #undef expm1 #endif #define