2025년 6월 10일 화요일

sqlcipher community windows build with vs 2022

1. openssl 을 static 라이브러리 방식으로 빌드한다.

설치 경로 : D:\MyProjects\OpenSSL\build\Win64-static


2. tcl 을 설치한다.

설치 경로 : c:\tcl

tcl 빌드 및 설치 : tcl 소스코드 다운로드 후 아래 실행

call "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build\vcvarsall.bat" x64 && cd D:\MyProjects\Download\tcl9.0.1\win && nmake -f makefile.vc INSTALLDIR=C:\tcl release && nmake -f makefile.vc INSTALLDIR=C:\tcl install


3. sqlcipher 소스 코드를 다운 받는다.


4. x64 Native Tools Command Prompt for VS 2022 실행


5. 환경 변수 설정 및 Makefile.msc 수정

SET PATH=%PATH%;c:\tcl\bin

SET PLATFORM=x64


Makefile.msc 제일 상단에 아래와 같이 추가










SQLITE_TEMP_STORE=2


TCC = $(TCC) -DSQLITE_HAS_CODEC -I"D:\MyProjects\OpenSSL\build\Win64-static\include"


LTLIBPATHS = $(LTLIBPATHS) /LIBPATH:$(ICULIBDIR) /LIBPATH:"D:\MyProjects\OpenSSL\build\Win64-static\lib"

LTLIBS = $(LTLIBS) libcrypto.lib libssl.lib ws2_32.lib shell32.lib advapi32.lib gdi32.lib user32.lib crypt32.lib kernel32.lib


출처 : https://www.domstamand.com/compiling-sqlcipher-sqlite-encrypted-for-windows-using-visual-studio-2022/


6. sqlite3.dll과 sqlite3.exe을 각각 아래와 같이 빌드한다.

nmake /f Makefile.msc sqlite3.dll USE_NATIVE_LIBPATHS=1 OPTS="-DSQLITE_HAS_CODEC -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_EXTRA_INIT=sqlcipher_extra_init -DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown -I\"D:\MyProjects\OpenSSL\build\Win64-static\include\""


nmake /f Makefile.msc sqlite3.exe USE_NATIVE_LIBPATHS=1 OPTS="-DSQLITE_HAS_CODEC -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_EXTRA_INIT=sqlcipher_extra_init -DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown -I\"D:\MyProjects\OpenSSL\build\Win64-static\include\""


* 아래와 같은 에러 발생 시 sqlite3.c 파일을 열어서 소스코드 제일 위에 아래 코드를 추가한다.


























sqlite3.c
sqlite3.c(109878): warning C4431: 형식 지정자가 없습니다. int로 가정합니다. 참고: C에서는 더 이상 기본 int를 지원하지 않 습니다.
sqlite3.c(109878): error C2061: 구문 오류: 식별자 'xoshiro_s'
sqlite3.c(109878): error C2059: 구문 오류: ';'
sqlite3.c(109878): error C2059: 구문 오류: '['
sqlite3.c(109880): error C2061: 구문 오류: 식별자 'xoshiro_rotl'
sqlite3.c(109880): error C2059: 구문 오류: ';'
sqlite3.c(109880): error C2059: 구문 오류: '<cv-qualifier>'
sqlite3.c(109884): error C2061: 구문 오류: 식별자 'xoshiro_next'
sqlite3.c(109884): error C2059: 구문 오류: ';'
sqlite3.c(109884): error C2059: 구문 오류: '<parameter-list>'
sqlite3.c(109901): warning C4431: 형식 지정자가 없습니다. int로 가정합니다. 참고: C에서는 더 이상 기본 int를 지원하지 않 습니다.
sqlite3.c(109901): error C2146: 구문 오류: ';'이(가) 'val' 식별자 앞에 없습니다.
sqlite3.c(109901): error C2065: 'val': 선언되지 않은 식별자입니다.
sqlite3.c(109904): error C2065: 'val': 선언되지 않은 식별자입니다.
sqlite3.c(109904): warning C4013: 'xoshiro_next'이(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다.
sqlite3.c(109905): error C2065: 'val': 선언되지 않은 식별자입니다.
sqlite3.c(109905): error C2065: 'val': 선언되지 않은 식별자입니다.
sqlite3.c(109906): error C2065: 'val': 선언되지 않은 식별자입니다.
sqlite3.c(110141): warning C4267: '함수': 'size_t'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
sqlite3.c(110145): warning C4267: '=': 'size_t'에서 'u32'(으)로 변환하면서 데이터가 손실될 수 있습니다.
sqlite3.c(110198): error C2065: 'xoshiro_s': 선언되지 않은 식별자입니다.
sqlite3.c(110198): warning C4312: '형식 캐스트': 'int'에서 더 큰 'void *'(으)로의 변환입니다.
sqlite3.c(110198): error C2065: 'xoshiro_s': 선언되지 않은 식별자입니다.
sqlite3.c(110208): warning C4267: '함수': 'size_t'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.
NMAKE : fatal error U1077: 'cl -nologo -W4 -DINCLUDE_MSVC_H=1   -DSQLITE_OS_WIN=1 -I. -I. -I.\src -fp:precise -MT -DNDEBUG -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_NONSTDC_NO_WARNINGS -DSQLITE_THREADSAFE=1 -DSQLITE_THREAD_OVERRIDE_LOCK=-1  -DSQLITE_MAX_TRIGGER_DEPTH=100  -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_ENABLE_GEOPOLY=1 -DSQLITE_ENABLE_STMTVTAB=1 -DSQLITE_ENABLE_DBPAGE_VTAB=1 -DSQLITE_ENABLE_DBSTAT_VTAB=1 -DSQLITE_ENABLE_BYTECODE_VTAB=1 -DSQLITE_ENABLE_COLUMN_METADATA=1 -DSQLITE_ENABLE_MATH_FUNCTIONS  -DSQLITE_HAS_CODEC -DSQLCIPHER_CRYPTO_OPENSSL -DSQLITE_ENABLE_FTS3=1 -DSQLITE_ENABLE_FTS4=1 -DSQLITE_ENABLE_FTS5=1 -DSQLITE_ENABLE_RTREE=1 -DSQLITE_TEMP_STORE=2 -DSQLITE_EXTRA_INIT=sqlcipher_extra_init -DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown -I"D:\MyProjects\OpenSSL\build\Win64-static\include" -O2 -Zi -Fosqlite3.lo -Fdsqlite3.pdb  -c sqlite3.c' : '0x2' 반환 코드입니다.
Stop.

D:\MyProjects\Download\sqlcipher>


sqlite3.c 제일 상단에 아래 코드 추가



2025년 5월 23일 금요일

리눅스 gstreamer 개발 라이브러리 설치

 sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

2025년 2월 26일 수요일

ffmpeg v4l2m2m 디코더 사용법

AVCodec* m_pCodec;
AVCodecContext* m_pCodecCtx;
...

// v4l2m2m 디코더 찾기
m_pCodec = (AVCodec*)avcodec_find_decoder_by_name("h264_v4l2m2m");

// 코덱 컨텍스트 할당
m_pCodecCtx = avcodec_alloc_context3(m_pCodec);

// 픽셀포멧, width, height 지정
m_pCodecCtx->pix_fmt = AV_PIX_FMT_NV12;
m_pCodecCtx->width = 1920;
m_pCodecCtx->height = 1080;

// 코덱 열기
avcodec_open2(m_pCodecCtx, m_pCodec, NULL);

// 디코딩
retLen = avcodec_send_packet(m_pCodecCtx, &m_avPacket);
if (retLen == 0) retLen = avcodec_receive_frame(m_pCodecCtx, frame);


* 디코더 찾기, 픽셀포멧/width/height 지정 외 일반 디코딩 방법과 동일