edgelesssys / edgelessrt

Edgeless RT is an SDK and a runtime for Intel SGX. It combines top-notch Go support with simplicity, robustness and a small TCB. Developing confidential microservices has never been easier! C++17 and Rust (experimental) are also supported.
https://edgeless.systems
MIT License
131 stars 20 forks source link

Linking error when executing go_ra sample. #149

Closed cdotsh closed 1 year ago

cdotsh commented 1 year ago

Hi, I receive a linking error when trying to build the go_ra sample. Seems like a libstdc++ compatibility issue, however I can't figure out how to resolve this. I use gcc v11.3.0, clang 14.0.0.1, libstdc++.so.6.0.30, running on Ubuntu 22.04.

Thanks for any pointers.

The output after running make:

[  0%] Built target app
[ 25%] Building C object CMakeFiles/enclave.dir/main.c.o
[ 50%] Linking CXX executable enclave
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(guard.o): in function `__cxa_guard_acquire':
(.text.__cxa_guard_acquire+0x17): undefined reference to `__libc_single_threaded'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(guard.o): in function `__cxa_guard_abort':
(.text.__cxa_guard_abort+0x7): undefined reference to `__libc_single_threaded'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(guard.o): in function `__cxa_guard_release':
(.text.__cxa_guard_release+0x7): undefined reference to `__libc_single_threaded'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(stdexcept.o): in function `std::logic_error::~logic_error()':
(.text._ZNSt11logic_errorD2Ev+0x63): undefined reference to `__libc_single_threaded'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(stdexcept.o): in function `std::runtime_error::~runtime_error()':
(.text._ZNSt13runtime_errorD2Ev+0x63): undefined reference to `__libc_single_threaded'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/libstdc++.a(stdexcept.o):(.text._ZNSt11logic_errorC2ERKSs+0x73): more undefined references to `__libc_single_threaded' follow
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/enclave.dir/build.make:118: enclave] Error 1
make[1]: *** [CMakeFiles/Makefile2:112: CMakeFiles/enclave.dir/all] Error 2
make: *** [Makefile:91: all] Error 2
thomasten commented 1 year ago

Hi the current release version of EdgelessRT doesn't support Ubuntu 22.04, but the next version will. You can already try it by building the latest master:

git clone https://github.com/edgelesssys/edgelessrt
cd edgelessrt/dockerfiles
DOCKER_BUILDKIT=1 docker build -t ghcr.io/edgelesssys/edgelessrt/build-base:v0.4.0 - < Dockerfile.build-base
DOCKER_BUILDKIT=1 docker build --target export -o. --build-arg erttag=master - < Dockerfile
docker rmi ghcr.io/edgelesssys/edgelessrt/build-base:v0.4.0

This creates the deb package.

cdotsh commented 1 year ago

Thank you very much for the quick response. This explains my troubles. However, when I run the 4th command, I receive the error:

------
 > exporting to client:
------
error from receiver: error setting metadata for edgelessrt_0.3.9_amd64_ubuntu-22.04.deb: lchown edgelessrt_0.3.9_amd64_ubuntu-22.04.deb: operation not permitted

even when running with sudo. I also tried building without Buildkit. Here it builds successfully, but I don't find any deb package. :/

thomasten commented 1 year ago

No idea why this error occurs, but you can try another way of getting the deb:

DOCKER_BUILDKIT=1 docker build --target export -t ert-export --build-arg erttag=master - < Dockerfile
docker create --name ert-export ert-export -
docker cp ert-export:edgelessrt_0.3.9_amd64_ubuntu-22.04.deb .
docker rm ert-export
cdotsh commented 1 year ago

Great, this worked for me! Thank you again very much!

thomasten commented 1 year ago

FYI we just released v0.4.0 with the Ubuntu 22.04 support