Error "plugin needed to handle lto object" while building CPP runtime for Lambda
Following the blog post "https://aws.amazon.com/blogs/compute/introducing-the-c-lambda-runtime/" to create a custom CPP Lambda function, received an error "/usr/bin/ld: runtime.cpp.o: plugin needed to handle lto object"
Complete error -
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
/usr/bin/ld: runtime.cpp.o: plugin needed to handle lto object
CMakeFiles/hello.dir/main.cpp.o: In function my_handler(aws::lambda_runtime::invocation_request const&)': main.cpp:(.text+0x3f): undefined reference to aws::lambda_runtime::invocation_response::success(std::string const&, std::string const&)'
CMakeFiles/hello.dir/main.cpp.o: In function main': main.cpp:(.text.startup+0x23): undefined reference to aws::lambda_runtime::run_handler(std::function<aws::lambda_runtime::invocation_response (aws::lambda_runtime::invocation_request const&)> const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [hello] Error 1
make[1]: *** [CMakeFiles/hello.dir/all] Error 2
make: *** [all] Error 2
command executed $ cmake3 .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=~/out ----> Successful $ make 3 -----> Errors as above
I had the same issue, but only when building with clang. Using gcc with all the same options was fine.
I would bet this is the same issue like the one described in #151 .
This project by default uses LTO (Link Time Optimization). When building with clang with LTO enabled, the produced .a lib archive will contain LLVM IR Bitcode instead of native object files.
"/usr/bin/ld: runtime.cpp.o: plugin needed to handle lto object"
I would also bet the plugin ld is referring to is something like LLVM Gold Plugin
The point is that GNU ld (aka ld.bfd) doesn't support LTO (or LLVM IR Bitcode) directly. It may actually work but only if enabling plugins which would extend it and add support for LTO.
So you may have to
- use LLVM LLD for the linking process; or
- disable LTO; or
- use GCC; or
- Rely on the not recommended use of the LLVM Gold Plugin with GNU ld, as the docs says: "However, usage of the LLVM gold plugin with ld.bfd is not tested and therefore not officially supported or recommended.").
See #151 for more details