1
SPACELAN 2018-02-04 22:28:33 +08:00
在 centos 6 上用 4.8.2 编译,然后静态链接 libstdc++和其他三方依赖
abi 可用通过编译时设置选项强制使用旧的 abi,而且好像只有 gcc5 以下和以上混合链接才会出现这个问题 chrome 那一套似乎也只要求 4.8.2 ? 我们这种方案虽然是长期踩坑总结出来的,不过还是觉得很挫 |
2
fluyy 2018-02-04 22:35:42 +08:00
开发机和线上环境,测试环境系统版本一致,在开发机上编译通过,然后直接打包二进制部署文件部署
|
3
codehz 2018-02-04 22:41:23 +08:00 via Android
能静态链接就静态链接吧。。。
|
4
skydiver 2018-02-04 22:44:06 +08:00
@fluyy +1
在相同版本的编译机上编译,然后打包二进制包部署。版本一样的系统,编译器也一样,不会有什么 abi 问题。 旧版 centos 可以安装 devtoolset,现在最新的是 https://www.softwarecollections.org/en/scls/rhscl/devtoolset-7/ ,这样就可以有新版 gcc 可用 |
5
redsonic 2018-02-04 23:44:18 +08:00
首先目标平台版本统一,autoconf+make/cmake+rpm/deb 最后依赖的 rpm/deb 全打一个 tar 包给他们。如果目标平台很杂还是用 docker 吧。
|
6
ETiV 2018-02-05 00:39:19 +08:00
我们用两种功能的 docker image,都基于 Debian:
- 一个用来 cmake build ; build 完丢进启用了 git-lfs 的 git repo ; - 一个用来运行,里面放了动态链接库的文件,指定好 LD_LIBRARY_PATH 环境变量。 运行的时候使用 -v 把可执行程序的目录挂载进去,指定 workdir,然后 entrypoint 就是编译好的程序 |
7
visionsmile 2018-02-05 00:50:17 +08:00 via Android
mark
|
8
htfy96 2018-02-05 00:51:16 +08:00
部署二进制,编译的时候指定 rpath,依赖库在编译的时候拷到 build/libs 下面,确保 build/在任何一个 Linux 下都能跑
|
9
xy90321 2018-02-05 00:51:49 +08:00 via iPhone
直接部署 bin +1
|
10
owt5008137 2018-02-05 09:29:41 +08:00 via Android 1
https://github.com/atframework/atframe_utils/blob/master/project/cmake/modules/FindConfigurePackage.cmake
我专门写了个模块干这事儿 然后比如编译 jemalloc,先执行./autogen.sh 再./configure 的 https://github.com/atframework/atsf4g-co/blob/master/3rd_party/jemalloc/jemalloc.cmake 然而这个宏的参数巨长 |
11
eaglexiang 2018-02-05 10:49:31 +08:00 via Android
我们自己构建了全套的库,编译成单个平坦二进制文件,写入 ROM 不会有任何问题
|
12
peihanw 2018-02-05 12:09:16 +08:00
OS 大版本和生产环境一致,cmake,第三方库尽量静态链接( lua、sqlite、curl 这些都静态链接),但是像 Oracle 的 OCI 没办法,就 LD_LIBRARY_PATH 吧。
|
13
dychenyi 2018-02-05 14:38:22 +08:00
动态链接也没关系关键是自己弄好 LD_LIBRARY_PATH, 我做 qt 的,windeploy linuxdeploy 工具都有。还是借助工具方便。
|
14
koth 2018-02-05 15:41:58 +08:00
用 bazel 编译,都静态化,然后拷贝。。。
|
15
hackpro 2018-02-06 12:13:56 +08:00
|