MySQL5.7.30源码编译指定RPATH
前言什么是RPATH?
在Linux环境下,使用动态链接的程序在运行时会自动链接 ld.so 这个库(OS X上是 dyld),然后通过 ld.so 来查找链接其它的库。而 RPATH 就是编译的时候链接到执行文件的链接库路径。OS X在 RPATH 的设置上和Linux还是有点出入的,OS X的 RPATH 采用的是绝对路径。
ld.so 搜索路径的优先级是这样的:
1. RPATH ,编译链接时加入 -rpath 参数指明所谓的 RUNPATH ,这样可执行文件(或者依赖其他动态链接库的动态链接库)就能告诉 ld.so 到哪里去搜索对应的动态链接库了。
2. LD_LIBRARY_PATH ,对于没有设定 RPATH 的可执行文件或者动态链接库,我们可以用 LD_LIBRARY_PATH 这个环境变量通知 ld.so 往哪里查找链接库。
3. /etc/ld.so.conf ,系统对 ld.so 的路径配置文件。
4. /usr/lib 、 /lib 和 /usr/local/lib ,系统默认路径。
场景
Linux编译MySQL5.7.30源码编译指定RPATH的路径为当前路径(.), 方便将编译的库文件移植到一台没有安装GCC7.0版本的系统上,因为默认的CentOS7.6采用的GCC是4.8版本,根本无法编译和运行MySQL5.7
方案
修改顶层目录文件CMakeLists.txt
72 # First, decide about build type (debug or release)
73 # If cmake is invoked with -DCMAKE_BUILD_TYPE,
74 # respect user wishes and do not (re)define CMAKE_BUILD_TYPE. If WITH_DEBUG
75 # is given, set CMAKE_BUILD_TYPE = Debug. Otherwise, use Relwithdebinfo.
76 SET(CMAKE_IN
60dc
STALL_RPATH "./")
77 IF(DEFINED CMAKE_BUILD_TYPE)
78 SET(HAVE_CMAKE_BUILD_TYPE TRUE)
79 ENDIF()
添加76行
附带编译指令
cmake ../ -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_DATADIR=/data/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/boost/boost_1_59_0
- CentOS 源码编译安装LAMP(Apache MySQL PHP)
- 在ubuntu中用源码编译方式安装好了mysql和php
- linux下mysql 5.5源码编译安装
- 源码编译安装MySQL-5.1.58,常规参数优化配置
- Linux源码安装mysql 5.5.13 (cmake编译)
- CentOS 下源码编译安装apache+php+mysql
- Linux下源码编译安装Mysql5.1及支持多个Mysql实例
- CentOS 6.5环境源码编译安装MySQL 5.6.34
- Linux 环境编译安装mysql (源码安装包)
- 源码编译安装MySQL 5.7.9
- 源码编译mysql5.5过程记录
- linux mysql5.5.8 源码编译安装记录(最新修改)
- 烂泥:mysql5.0数据库源码编译安装
- Mysql-5.5 源码编译安装
- mac os源码编译MYSQL
- Redhat AS 5 源码编译安装 mysql-5.1.49
- Linux下MySQL 5.5.12源码编译安装.
- 源码编译安装 MySQL 5.5.x 实践
- Linux 下 MySQL 5.5.8 源码编译安装记录
- Gradle编译指定目录下的源码命令参数