awslabs / awslabs/aws-lambda-cpp
Aws Lambda: C++ custom runtime - /usr/bin/ld: cannot find /usr/lib64/libc_nonshared.a
- 主要语言
- C++
- 星标
- 465
- 派生
- 98
- 平均合并
- 12 小时 47 分钟
- 30 天内合并 PR
- 3
描述
I am trying to add `g++` inside `AWS Lambda C++ custom runtime`.
Now `g++` requires `.so` (shared libraries) files as well as `.a` (static libraries).
For this, I installed g++ inside chroot directory (directory `gpp`) on the Amazon Linux machine.
Now, I created another directory that has `bin`, `usr`, `lib`, and `lib64` directories (taken from chroot directory). I created a zip of this directory, uploaded to s3 (as it is more than 50MB), and created a Lambda layer using this zip directory.
Now, after adding this `layer` in the `lambda` function, I am trying to run.
```
execl("/opt/usr/bin/g++48", "/opt/usr/bin/g++48", "-Wall", "/tmp/hello.cpp","-o", "/tmp/hello.o",
"-I/opt/gpp3/usr/include/", (char *) 0)
```
Using the above `g++` is able to find `shared libraries` as well as `header files` but it is not able to find the static library.
```
/usr/bin/ld: cannot find /usr/lib64/libc_nonshared.a
collect2: error: ld returned 1 exit status
```
`libc_nonshared.a` exists inside `/opt/gpp3/usr/lib64/` but it is searching in `/usr/lib64/`.
I tried providing full path in g++ command as `-L/opt/gpp3/usr/lib64/libc_nonshared.a` and
`-L/opt/gpp3/usr/lib64/libc_nonshared` and `-L/opt/gpp3/usr/lib64/`
But none of them works. Any help is deeply appreciated.
贡献指南
调研方向
先从报告中的 execl 调用以及 /opt/gpp3 下的 AWS Lambda layer 路径入手,然后检查 linker 为什么搜索 /usr/lib64 而不是 layer 目录。重现 g++48 命令,并验证 libc_nonshared.a 是从 /opt/gpp3/usr/lib64 解析的;当示例编译在 Lambda 环境中成功时,该 issue 即完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- aws, cpp, linux
- 领域
- build-system, cloud
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 需要澄清
- 新手友好度
- 25/100