본문 바로가기
운영체제/리눅스

[ubuntu 18.04] opentelemetry cpp 빌드하기

by 체리 2022. 4. 7.
반응형

ubuntu 18.04에서는 apt를 통해 설치하는 cmake, gtest, benchmark의 버전이 낮아서 opentelemetry build에 문제가 있다.

참고로 20.04에서는 아무 문제 없이 자연스럽게 build까지 쉽게 된다.

따라서 이런 dependency를 따로 설치해야 한다. 기본적으로 gcc는 설치 되어 있다고 가정하는데 혹시 안되어 있다면 요렇게!

$ sudo apt install build-essential

(git은 있겠지?)

 

1. cmake 설치

일단 opentelemetry github에 남아있는 comment를 보면 cmake 3.15 버전에서 진행했다고 하여 일단 cmake 3.16.5를 ㅋ 설치하자.

$ wget https://github.com/Kitware/CMake/archive/refs/tags/v3.16.5.tar.gz

$ tar zxvf v3.16.5.tar.gz

$ cd CMake-3.16.5

$ ./bootstrap --prefix=/usr/local

$ make

$ make install

혹시 아래와 같은 오류가 발생한다면 terminal을 종료하고 다시 띄우면 됨
$ cmake --version
CMAKE Error: Could not find CMAKE_ROOT !!!

 

2. gtest 설치

apt를 통해 설치하면 1.8 버전이 설치되는데 build할 때 아래와 같은 error가 발생한다.

Scanning dependencies of target span_test
[ 10%] Building CXX object api/test/nostd/CMakeFiles/span_test.dir/span_test.cc.o
[ 11%] Linking CXX executable span_test
CMakeFiles/span_test.dir/span_test.cc.o: In function `SpanTest_PointerCountConstruction_Test::TestBody()':
span_test.cc:(.text+0x128f): undefined reference to `testing::internal::DeathTest::Create(char const*, testing::Matcher<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, char const*, int, testing::internal::DeathTest**)'
CMakeFiles/span_test.dir/span_test.cc.o: In function `SpanTest_RangeConstruction_Test::TestBody()':
span_test.cc:(.text+0x1b75): undefined reference to `testing::internal::DeathTest::Create(char const*, testing::Matcher<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, char const*, int, testing::internal::DeathTest**)'
CMakeFiles/span_test.dir/span_test.cc.o: In function `SpanTest_ContainerConstruction_Test::TestBody()':
span_test.cc:(.text+0x2fd2): undefined reference to `testing::internal::DeathTest::Create(char const*, testing::Matcher<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, char const*, int, testing::internal::DeathTest**)'
collect2: error: ld returned 1 exit status
api/test/nostd/CMakeFiles/span_test.dir/build.make:85: recipe for target 'api/test/nostd/span_test' failed
make[2]: *** [api/test/nostd/span_test] Error 1
CMakeFiles/Makefile2:2126: recipe for target 'api/test/nostd/CMakeFiles/span_test.dir/all' failed
make[1]: *** [api/test/nostd/CMakeFiles/span_test.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

$ wget https://github.com/google/googletest/archive/refs/tags/release-1.11.0.tar.gz

$ tar zxvf release-1.11.0.tar.gz

$ cd googletest-release-1.11.0/

$ cmake .

$ cd lib

$ sudo cp *.a /usr/local/lib

googletest-release-1.11.0/googletest/include 요 경로로 이동해서

$ sudo cp -r gtest/ /usr/local/include/

googletest-release-1.11.0/googlemock/include 요 경로로 이동해서

$ sudo cp -r gmock/ /usr/local/include/

 

3. google benchmark 설치

apt를 통한 버전은 1.3.0, git에서 받자.

$ wget https://github.com/google/benchmark/archive/refs/tags/v1.6.1.tar.gz

$ tar zxvf v1.6.1.tar.gz

$ cd benchmark-1.6.1/

$ cmake -E make_directory "build"

$ cmake -E chdir "build" cmake -DBENCHMARK_DOWNLOAD_DEPENDENCIES=on -DCMAKE_BUILD_TYPE=Release ../

$ cmake --build "build" --config Release

또는

$ sudo cmake --build "build" --config Release --target install

혹시 "Error: could not load cache" 이런 메시지와 함께 안 될땐 CMakeCache.txt를 삭제 후 cmake -E ~~ 요기부터 다시 시작
혹시 외부 접속이 안되는 경우 진행 중 googletest clone 하려고 한다면 문제가 발생하므로 아래와 같이 수정
둘 중 하나만 해도 되는지는 확인 못 함
./benchmark-1.6.1/WORKSPACE 수정
line 15: https://github.com/google/googletest.git -> https://원하는 내부 repo 주소
./benchmark-1.6.1/cmake/GoogleTest.cmake.in
line 40: https://github.com/google/googletest.git -> https://원하는 내부 repo 주소

 

4. opentelemetry cpp 설치

버전은 1.20

참고: https://github.com/open-telemetry/opentelemetry-cpp/blob/main/INSTALL.md

$ wget https://github.com/open-telemetry/opentelemetry-cpp/archive/refs/tags/v1.2.0.tar.gz

$ tar zxvf v1.2.0.tar.gz

$ cd opentelemetry-cpp-1.2.0

$ mkdir build

$ cd build

$ cmake ..

$ cmake --build . --target all

테스트는

$ ctest

반응형

댓글