1 - 如果能直接编译成静态的那自然是比较省事了,但很多时候没办法这样,需要动态的,那就接着看吧
2 - 在相对比较老的发行版上编译,这样是用老GLIBC在新的发行版上也能运行,反之则不行。
3 - 附带共享库用RPATH,别套脚本用LD_LIBRARY_PATH(属于临时解决方法,发布软件不应该使用该方法)。编译的时候考虑是用 -Wl,-rpath='$ORIGIN/../lib'传递给 linker类似的方法,这样执行文件会在自己的相对路径去找so库文件。$ORIGIN指代的是真正的执行文件的位置,所以即使软链接到别的地方也没问 题,而用LD_LIBRARY_PATH环境变量则不行。用ldd查看可以看到效果。
4 - 其实也可以是用patchelf来hack已编译好的执行文件的RPATH,记得so库之间有互相依赖的话也要改。
5 - 系统的库如libc或libm是没什么必要也打包的。