前言什麼是RPATH?mysql
在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 ,系統默認路徑。sql
場景ide
Linux編譯MySQL5.7.30源碼編譯指定RPATH的路徑爲當前路徑(.), 方便將編譯的庫文件移植到一臺沒有安裝GCC7.0版本的系統上,由於默認的CentOS7.6採用的GCC是4.8版本,根本沒法編譯和運行MySQL5.7ui
方案debug
修改頂層目錄文件CMakeLists.txtci
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_INSTALL_RPATH "./")
77 IF(DEFINED CMAKE_BUILD_TYPE)
78 SET(HAVE_CMAKE_BUILD_TYPE TRUE)
79 ENDIF()源碼
添加76行it
附帶編譯指令編譯
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_0class