如何在Heroku平台使用compile-run包编译运行C、C++等多语言代码?
解决方案
1. 配置多Buildpack构建环境
Heroku 默认仅会为应用加载主运行环境对应的 Buildpack,你需要的 C/C++ 编译器、Python 运行时等依赖默认未预装,需手动添加官方 Buildpack:
- 进入 Heroku 应用后台的「Settings」页面,下滑找到「Buildpacks」配置区
- 按从上到下的顺序添加以下 Buildpack:
- 要安装 C/C++ 编译套件,先添加
heroku-buildpack-apt - 要支持 Python 代码运行,添加官方
heroku/pythonBuildpack - 主运行环境为 Node.js 的话,确认官方
heroku/nodejsBuildpack 放在列表最后一位
- 要安装 C/C++ 编译套件,先添加
Buildpack 按从上到下的顺序执行,主运行环境对应的 Buildpack 必须放在末尾。
2. 配置系统依赖安装清单
添加 apt Buildpack 后,在项目根目录新建名为 Aptfile 的文件,写入需要安装的编译运行工具:
gcc g++ python3 nodejs
部署时 Heroku 会自动从 apt 源安装上述依赖到系统路径。
3. 显式指定compile-run的可执行文件路径
Heroku 容器内的可执行文件路径和本地环境不同,调用 compile-run 时必须传入全路径参数,避免找不到编译器的报错:
- C 编译器路径:
/usr/bin/gcc - C++ 编译器路径:
/usr/bin/g++ - Python 解释器路径:
/usr/bin/python3 - JavaScript 运行时路径:
/usr/bin/node
以下是 Node.js 环境下的调用示例:
const { compile, run } = require('compile-run'); // C代码编译调用示例 const cRes = await compile.c('待编译的C代码内容', { compilerPath: '/usr/bin/gcc' }); // Python代码运行调用示例 const pyRes = await run.python('待运行的Python代码内容', { executionPath: '/usr/bin/python3' });
4. 验证与适配调整
- 部署完成后可以执行
heroku run bash进入运行容器,用which gcc、which python3等命令确认可执行文件的实际路径,如果和上述路径不一致,用实际查询到的路径替换即可 - Heroku dyno 有默认运行时长和内存限制,编译/运行耗时过长的代码会被强制终止,需要自行调整接口超时参数适配平台限制
内容的提问来源于stack exchange,提问作者Competitive Fight Club
相关产品推荐
相关产品推荐

