전체 글306 C++ 정적 라이브러리 vs 동적 라이브러리 비교 프로젝트 프로젝트 배경임베디드 개발에서의 라이브러리 의존성 문제NVIDIA Jetson 시리즈(TX2, ORIN 등)에서 임베디드 개발을 진행하다 보면 다음과 같은 상황을 자주 경험하게 됩니다:문제 상황:TX2 보드에서 개발하고 빌드한 프로젝트가 정상 작동동일한 코드를 ORIN 보드로 업그레이드하여 새로 빌드빌드는 성공하지만 실행 시 다양한 오류 발생일반적인 오류 사례:# 라이브러리 버전 불일치./my_app: /usr/lib/aarch64-linux-gnu/libopencv_core.so.4.2: version `OPENCV_4.5' not found# 라이브러리 경로 문제./my_app: error while loading shared libraries: libcudnn.so.8: cannot open sha.. 임베디드 관련 카테고리/C++ 2025. 7. 8. Bazel과 nlohmann/json을 활용한 멀티스레드 안전 싱글턴 패턴 구현 이번 포스트에서는 Bazel 빌드 시스템을 사용하여 외부 라이브러리(nlohmann/json)를 다운로드하고, 멀티스레드 환경에서 안전하게 작동하는 싱글턴 패턴을 구현하는 방법을 소개합니다.프로젝트 개요이 프로젝트의 핵심 목표는 다음과 같습니다:외부 라이브러리 관리: nlohmann/json 라이브러리를 온라인에서 다운로드하여 정적 라이브러리로 링크설정 파일 관리: JSON 설정 파일을 바이너리와 함께 배포하고 런타임에 읽기멀티스레드 안전성: 싱글턴 패턴으로 구현된 설정 클래스를 여러 스레드에서 안전하게 사용프로젝트 구조├── MODULE.bazel├── repositories.bzl├── BUILD├── config.json├── third_party/│ ├── BUILD│ └── nlohman.. 카테고리 없음 2025. 7. 7. Bazel을 활용한 정적 라이브러리 빌드 실전 가이드 이전 포스트에서 라이브러리 의존성 문제와 해결 방법에 대해 다뤘습니다. 이번에는 Google의 Bazel 빌드 도구를 활용하여 동적 라이브러리 중 필요한 부분만 정적 라이브러리로 변환하는 구체적인 방법을 살펴보겠습니다.Bazel이란?Bazel은 Google에서 개발한 빌드 도구로, 대규모 프로젝트에서 빠르고 안정적인 빌드를 제공합니다. 특히 다음과 같은 장점이 있습니다:증분 빌드: 변경된 부분만 다시 빌드병렬 빌드: 멀티코어 환경에서 효율적인 빌드재현 가능한 빌드: 동일한 입력에 대해 항상 동일한 출력크로스 플랫폼 지원: Linux, macOS, Windows 지원Bazel의 핵심 장점: 온라인 의존성 관리Bazel의 가장 큰 장점 중 하나는 온라인에서 특정 라이브러리 버전을 자동으로 다운로드하여 정적 .. 카테고리 없음 2025. 7. 7. C++ 프로젝트에서 라이브러리 의존성 문제 해결하기 C++ 프로젝트를 진행하면서 가장 골치 아픈 문제 중 하나는 바로 라이브러리 의존성 문제입니다. 내 개발 환경에서는 완벽하게 작동하던 코드가 다른 환경에서는 빌드조차 되지 않는 경험, 한 번쯤은 겪어보셨을 것입니다. 이번 포스트에서는 이러한 문제의 원인과 해결 방법을 정리해보겠습니다. 정적 라이브러리 vs 동적 라이브러리정적 라이브러리 (Static Library)정적 라이브러리는 여러 오브젝트 파일(.o)들을 하나의 아카이브 파일(.a)로 묶어놓은 것입니다. 컴파일 시점에 실행 파일에 포함되어 배포되므로, 실행 시 별도의 라이브러리 파일이 필요하지 않습니다.동적 라이브러리 (Dynamic Library)동적 라이브러리는 실행 시점에 외부에서 불러와 사용하는 라이브러리입니다. Linux에서는 .so(S.. 임베디드 관련 카테고리/C++ 2025. 7. 7. CMake와 Meson에서 만든 정적 라이브러리 .a 파일, 호환이 될까? C++ 프로젝트를 빌드할 때 자주 사용되는 빌드 시스템인 CMake와 Meson, Bazel.이 두 빌드 시스템은 내부 구조가 다르지만, 둘 다 .cpp 파일을 컴파일해 .o를 만들고, .o를 모아서 .a라는 정적 라이브러리를 생성한다는 점은 같습니다.그렇다면,CMake로 만든 .a 정적 라이브러리 파일을 Meson 프로젝트에서 사용할 수 있을까요?혹은 그 반대는 가능할까요?결론부터 말씀드리면, 가능합니다. 하지만 몇 가지 조건을 만족해야 해요.정적 라이브러리 .a의 정체정적 라이브러리(.a)는 여러 개의 오브젝트 파일(.o)을 묶은 압축 파일로, 실행파일을 만들 때 링커가 참조하는 대상입니다.📦 예시:ar rcs libmylib.a file1.o file2.o이 파일은 libmylib.a라는 이름의 .. 임베디드 관련 카테고리/C++ 2025. 4. 11. C++ 빌드 개념과 오브젝트 파일(.o), 정적 라이브러리(.a), 링커 이해하기 C++ 개발을 시작하면 반드시 마주치는 개념 중 하나가 바로 오브젝트 파일(.o), 정적 라이브러리(.a), 그리고 **링커(Linker)**입니다.특히 CMake나 Meson처럼 빌드 시스템을 사용하여 다양한 디렉터리로 나뉘어진 프로젝트를 빌드할 때, 이 구조에 대한 이해는 필수예요.이 글에서는 빌드 과정을 쉽게 설명하고, 실무에서 자주 겪는 정적 라이브러리 연동과 링커의 역할까지 함께 정리해보겠습니다.🛠️ C++ 빌드 과정, 단계별로 이해하기C++ 프로그램은 아래와 같은 과정을 거쳐서 실행파일이 됩니다.1. 전처리 (Preprocessing)#include, #define, #ifdef 같은 전처리 지시문을 처리하는 단계입니다..cpp 파일에서 헤더 파일들을 실제 코드로 치환해 .i 파일을 만들어냅.. 임베디드 관련 카테고리/C++ 2025. 4. 11. JAX에 대해 알아보자 GPU 가속 + 자동 미분의 끝판왕, 그리고 NumPy와의 완벽한 호환성 🧠 JAX란?JAX는 NumPy와 같은 API를 제공하면서 GPU 가속과 자동 미분 기능까지 지원하는 차세대 수학 라이브러리입니다.요약하자면,NumPy + Autograd + XLA = JAX🧩 JAX의 주요 기능기능설명jnp (JAX NumPy)NumPy와 거의 동일한 문법으로 GPU 연산 가능grad()함수의 도함수를 자동으로 구함 (Autograd)jit()연산을 Just-In-Time 컴파일하여 속도 향상vmap()벡터화 자동 처리 (for문 없이도 여러 입력 처리)GPU/TPU 가속코드 수정 없이 자동으로 GPU에서 연산 실행⚙️ 설치 방법기본 설치 (CPU만):pip install jax jaxlibGPU 사용 환경 .. 임베디드 관련 카테고리/Embedded System 2025. 4. 8. PyCUDA란 무엇인가? Python으로 GPU를 직접 다루는 법, 쉽고 강력하게! 🧠 PyCUDA란?PyCUDA는 CUDA(C++) 코드를 Python에서 작성하고 실행할 수 있게 해주는 라이브러리입니다.즉,Python + GPU + 병렬 처리 = PyCUDAPyCUDA는 다음과 같은 강점을 가지고 있어요:장점설명CUDA 커널 직접 작성 가능고성능 커스터마이징 가능NumPy와 자연스럽게 연동데이터를 GPU로 넘기기 쉬움빠른 컴파일과 실행런타임에 CUDA 코드를 컴파일GPU 메모리 직접 제어최적화에 용이함⚙️ 설치 방법pip install pycuda💡 설치 전에 CUDA Toolkit이 설치되어 있어야 합니다.nvcc --version으로 확인해보세요!🧪 PyCUDA 기본 예제: 벡터 덧셈이제 간단한 GPU 연산 예제를 .. 임베디드 관련 카테고리/Embedded System 2025. 4. 7. NumPy란 무엇인가? GPU 연산 전에 꼭 알아야 할 파이썬 수학 연산의 기본기👋 시작하며“GPU 연산? CUDA? PyCUDA? JAX?”이런 단어들이 눈에 띄기 시작했다면,그 전에 먼저 NumPy를 제대로 이해하는 것이 아주 중요합니다.오늘은 수치 연산의 기본기이자,GPU 연산의 출발점이라고 할 수 있는 NumPy를예제 중심으로 쉽고, 빠르게 이해해보겠습니다.🧩 NumPy란?**NumPy(Numerical Python)**는 과학 계산에 특화된 파이썬 라이브러리입니다.특히 배열 연산, 선형대수, 통계 처리 등에서 많이 쓰여요.간단히 말해서:"파이썬을 수학 계산용 언어로 만들어주는 도구"💡 NumPy를 쓰면 뭐가 좋을까?기능설명고성능 다차원 배열ndarray라는 타입을 사용브로드캐스팅 지원크기가 다른 배열 간 연산 자.. 임베디드 관련 카테고리/Embedded System 2025. 4. 7. GitHub 저장소에 독립적인 브랜치 추가하기: 용량 최적화 가이드 🔍 문제 상황GitHub에 이미 존재하는 저장소에 완전히 새로운 코드를 추가하고 싶지만, 기존 코드의 히스토리나 파일은 필요 없는 경우가 있습니다. 특히 저장소 용량을 최소화하면서 프로젝트를 관리하고 싶을 때 유용한 방법을 소개합니다.💡 해결책: Orphan 브랜치 사용하기Git의 --orphan 옵션을 사용하면 기존 브랜치의 히스토리나 파일을 상속받지 않는 완전히 독립적인 브랜치를 생성할 수 있습니다.📝 단계별 가이드1. 저장소 클론하기먼저 대상 저장소를 로컬에 클론합니다:git clone https://github.com/사용자명/저장소명.gitcd 저장소명2. Orphan 브랜치 생성하기히스토리가 없는 새로운 브랜치를 생성합니다:git checkout --orphan 새브랜치명3. 현재 스테이.. 임베디드 관련 카테고리/Github 2025. 3. 17. SSL/TLS 인증서 파일 확장자 종류(pem, key, csr, crt) 및 사용 가이드 1. SSL/TLS 인증서 관련 주요 파일 형식1.1 PEM (Privacy Enhanced Mail)가장 일반적인 인증서 포맷Base64로 인코딩된 텍스트 파일보통 .pem, .crt, .cer, .key 확장자 사용-----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 형태로 시작과 끝 표시인증서, 개인 키, 공개 키, 인증서 체인 등 다양한 정보를 포함할 수 있음1.2 키 파일 (.key)개인 키(Private Key)가 저장된 파일서버에서만 보관하고 절대 외부에 노출되면 안 됨SSL/TLS 연결 시 암호화 및 복호화에 사용내부적으로는 보통 PEM 형식 사용1.3 CSR (Certificate Signing Request) 파일인증서 서명 요청 파일인증 기.. 임베디드 관련 카테고리/프로토콜 2025. 3. 11. UART 포트와 케이블 종류 및 차이점 정리 UART(Universal Asynchronous Receiver-Transmitter)는 임베디드 시스템, MCU(마이크로컨트롤러), SBC(싱글보드 컴퓨터), 산업 장비 등에서 직렬 통신을 위한 핵심적인 인터페이스다.이번 글에서는 UART 포트와 케이블의 종류 및 차이점을 정리하고, 실전에서 어떻게 활용할 수 있는지 알아보겠다.🔹 1. UART 포트의 종류와 명칭UART 포트는 직렬 통신을 위한 하드웨어 인터페이스로, 전압 레벨과 사용 환경에 따라 여러 종류가 있다.✅ 주요 UART 포트 종류 및 비교명칭설명사용 예시UART 포트기본적인 UART 기반의 직렬 통신 포트TX/RX 핀, UART Header, UART Serial PortTTL 시리얼 포트로직 레벨이 3.3V 또는 5V인 UART 포트.. 임베디드 관련 카테고리/Embedded System 2025. 3. 1. 이전 1 2 3 4 ··· 26 다음 728x90 반응형