git clone https://github.com/eProsima/Fast-CDR.git
cd Fast-CDR
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
cd ~ # 홈 디렉토리로 이동
git clone https://github.com/eProsima/Fast-DDS.git
cd Fast-DDS
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install
⚠️ Fast DDS 설치 시 Asio
, tinyXML2
, foonathan_memory
을 추가로 설치해야할 수 있음.
⚠️ install 시 -dev
를 붙이는 이유
예시)
libasio
→ 실행할 때 쓰는 공유 라이브러리 (바이너리만 있음)libasio-dev
→ 개발할 때 쓰는 헤더파일(.h)과 심볼릭 링크 등등을 포함⚠️ sudo make install을 왜 하는지?
make를 하게되면 build 디렉토리 내부에 빌드한 출력물을 저장시켜놓는다.
make install을 하게되면 시스템 디렉토리에 복사해서 다른 데서 쓸 수 있게 등록하는 과정
항목 | 설치 경로(예시) |
---|---|
헤더 파일(.h) | /usr/local/include/ |
라이브러리(.so) | /usr/local/lib/ |
실행 파일 | /usr/local/bin/ |
windows
에서 시스템 path로 등록을 하는 개념이라고 생각하면 될 것 같다.
그러나 완전히 같은 것은 아니다.
윈도우
에서는 헤더
, 라이브러리
가 있는 path를 등록을 해주는 것이지만 리눅스
에서는 실제 시스템 디렉토리에 복사를 한다.
Fast DDS는 DDS(데이터 분산 서비스) 구조를 따르기 때문에, 다음 4가지 핵심 구성 요소가 필요하다.
https://github.com/eProsima/Fast-DDS/tree/master/examples/cpp/hello_world를 참고하면 제일 간단한 fastdds 예제를 참고할 수 있다.
git clone https://github.com/eProsima/Fast-DDS-Gen.git
cd Fast-DDS-Gen
gradle assemble
sudo cp scripts/fastddsgen /usr/local/bin/
sudo cp build/libs/fastddsgen-*.jar /usr/local/bin/fastddsgen.jar
*.ldl
파일을 변환하기 위해서는 Fast-DDS-Gen
이 필요하다.
⚠️ *.ldl
파일: 어떤 메시지를 주고받을지 약속해놓은 설계도
jave
빌드는 처음이라서 gpt
의 도움을 빌렸다.
sudo apt install openjdk-11-jdk
sudo apt install gradle
위와 같이 java를 빌드하기 위한 tool을 설치해준 뒤 빌드 하고 서비스 디렉토리에 복사해준다.
/usr/local/bin
에
fastddsgen
실행파일이 존재하는 걸 확인할 수 있다.
이제 준비가 완료되었다. 이제 HelloWorld.idl
파일을 생성해준다.
// -- HelloWorld.idl
struct HelloWorld
{
string message;
};
위 처럼 간단하게 작성해준다.
/usr/local/bin/fastddsgen -example CMake HelloWorld.idl
명령어를 입력하게되면
위처럼 *.cxx
, *.hpp
파일이 생성되는 것을 볼 수 있다.
CMakeLIst.txt
에는
cmake_minimum_required(VERSION 3.10.0)
project(fastdds_test VERSION 0.1.0 LANGUAGES C CXX)
# Find requirements
if(NOT fastcdr_FOUND)
find_package(fastcdr 2 REQUIRED) # REQUIRED는 없으면 빌드를 아예 실패시켜라.
endif()
if(NOT fastdds_FOUND)
find_package(fastdds 3 REQUIRED)
endif()
file(GLOB HELLO_WORLD_SOURCES_CXX "*.cxx")
file(GLOB HELLO_WORLD_SOURCES_CPP "*.cpp")
add_executable(fastdds_test ${HELLO_WORLD_SOURCES_CXX} ${HELLO_WORLD_SOURCES_CPP})
target_link_libraries(fastdds_test fastdds fastcdr)
위와 같이 설정해준다. 이 후 아래 명령어를 실행시킨다.
mkdir build
cd build
cmake ..
make
fastdds_test
실행파일이 생성된 것을 확인할 수 있다.
terminal
창을 2개 띄운 뒤 publisher와 subscriber를 실행한다.
./fastdds_test subscriber
./fastdds_test publisher
위와 같이 테스트가 되는 것을 확인할 수 있다.
일단 dds
통신을 fastdds
를 활용하여 테스트를 해보았다.
내부적으로 코드가 어떤식으로 동작하는지는 분석을 해봐야할 것 같다.
aws
서버에 subscriber
를 개발하여 올릴 예정이다.
linux
에서 하는 것이 쉽지는 않지만 조금씩 익숙해지는 것 같다.
끝.