티스토리 뷰
https://www.youtube.com/watch?v=XuWjcX8KaVQ
1. 시작 전 세팅
- 설명의 편의를 위해 home 폴더를 기준으로 작성합니다.
cd ~
pwd
# 현재 경로 : /root
1-1. wget 설치
- http 로 라이브러리 파일을 다운받기 위한 도구입니다.
yum install wget
* Centos8 에서 아래와 같은 에러가 나는 경우 이동 (부록 1)
Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: NoURLs in mirrrlist
1-2 폴더구조
- 라이브러리 빌드를 위한 폴더 구조입니다.
[root] mkdir libpng_build
[root] cd libpng_build
- libpng, zlib 설치
[libpng_build] wget https://sourceforge.net/projects/libpng/files/libpng16/1.6.38/libpng-1.6.38.tar.gz
[libpng_build] wget https://sourceforge.net/projects/libpng/files/zlib/1.2.7/zlib-1.2.7.tar.gz
- 다운로드를 완료하면 ls 명령어로 잘 다운됐는지 확인 할 수 있습니다.
- 압축을 풀어줍시다.
# 압축 풀기
[libpng_build] tar -xvf libpng-1.6.38.tar.gz
[libpng_build] tar -xvf zlib-1.2.7.tar.gz
# 압축 푼 파일 제거
[libpng_build] rm -rf libpng-1.6.38.tar.gz
[libpng_build] rm -rf zlib-1.2.7.tar.gz
# 디렉토리 이름 변경
[libpng_build] mv libpng-1.6.38/ libpng
[libpng_build] mv zlib-1.2.7/ zlib
zlib 을 1.2.7 로 받은 이유 (부록 2)
2. 빌드
2-1. libpng_build 에 CMakeLists.txt 추가합니다.
[libpng_build] vi CMakeLists.txt
# CMakeLists.txt 내용
project(libpng_build)
cmake_minimum_required(VERSION 3.17)
add_subdirectory(zlib)
add_subdirectory(libpng)
2-2. 빌드하기
- cmake 설치합니다.
yum install cmake3
yum install gcc gcc-c++
- build 폴더 추가합니다.
[libpng_build] mkdir build
[libpng_build] cd build
- cmake 로 Makefile 을 생성합니다.
[build] cmake \
-DPNG_BUILD_ZLIB=ON \
-DZLIB_INCLUDE_DIR=/root/libpng_build/build/zlib \
-DZLIB_INCLUDE_DIRS=/root/libpng_build/build/zlib \
-DZLIB_LIBRARIES=/root/libpng_build/build/zlib/libz.a \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
..
- 빌드하기 위해 sub directory 의 파일 복사합니다.
[build] cp ../zlib/*.h zlib/
- make 명령으로 빌드를 시작합니다.
[build] make
3. 테스트
- 샘플 프로젝트를 구성합니다.
cd ~
mkdir libpng_test
cd libpng_test
mkdir test
mkdir include
mkdir lib
- 테스트 코드를 작성합니다.
// test/main.cpp
#include <iostream>
#include <cstdio>
#include <png.h>
int main()
{
FILE* m_file;
m_file = fopen( "/root/libpng_test/sample.png", "rb" );
if ( !m_file )
{
std::cout << "fail open\n";
return 0;
}
png_structp pngPtr = nullptr;
png_infop infoPtr = nullptr;
pngPtr = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, NULL, NULL );
if ( pngPtr == NULL ) return 0;
infoPtr = png_create_info_struct( pngPtr );
if ( infoPtr == NULL || setjmp( png_jmpbuf( pngPtr ) ) )
{
png_destroy_read_struct( &pngPtr, &infoPtr, NULL );
return 0;
}
png_init_io( pngPtr, m_file );
int sigRead = 0;
png_set_sig_bytes( pngPtr, sigRead );
png_read_png( pngPtr, infoPtr, PNG_TRANSFORM_EXPAND, NULL );
return 0;
}
# test/CMakeLists.txt
project( Test )
FILE( GLOB_RECURSE SRCS ./*.* )
include_directories(
"../include"
)
link_directories(
"${CMAKE_SOURCE_DIR}/lib"
)
add_executable( Test ${SRCS} )
target_link_libraries(
Test
png
z
)
# CMakeLists.txt
project( Lingpng_Test )
add_subdirectory( test )
- 위에서 사용했던 헤더파일과 라이브러리를 복사합니다
[libpng_test] cp ../libpng_build/libpng/*.h include/
[libpng_test] cp ../libpng_build/build/libpng/*.h include/
[libpng_test] cp ../libpng_build/build/libpng/libpng.a lib/
[libpng_test] cp ../libpng_build/build/zlib/libz.a lib
- 위 test/main.cpp 에서 png 파일을 읽는 부분에 정의한 png 파일을 추가합니다.
- 테스트코드에서는 빌드 여부를 보기 위함으로 파일이 없어도 상관 없습니다.
- 테스트 프로젝트를 빌드합니다.
[libpng_test] mkdir build
[libpng_test] cd build
[build] cmake ..
[build] make
- 빌드를 성공적으로 마쳤다면 test 폴더안에 바이너리 파일이 추가됩니다.
- 이상으로 libpng 빌드 정리를 마칩니다.
부록
1. Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: NoURLs in mirrrlist 에러시 처리
To migrate from CentOS 8 to CentOS Stream 8, run the following commands:
dnf --disablerepo '*' --enablerepo=extras swap centos-linux-repos centos-stream-repos
dnf distro-sync
2. zlib 을 1.2.7 로 받은 이유
위 과정을 마친후 libpng_test/include/pnglibconf.h 를 보면 ZLIB_VERSION 이 설정되어있습니다.
libpng 라이브러리를 빌드할때 맞는 ZLIB 을 사용해야 하기 때문에 1.2.7 버전을 사용하였습니다.
확인은 다음과 같이 할 수 있습니다.
cat /root/libpng_build/build/libpng/pnglibconf.h | grep ZLIB
#define PNG_ZLIB_VERNUM 0x1270
'개발 > 일상' 카테고리의 다른 글
jupyter notebook 에 anaconda 로 독립된 환경 만들기 (0) | 2022.12.11 |
---|---|
mysql 날짜에서 요일 얻어내기 (0) | 2022.10.20 |
장애물 우회처리 논문 정리 [Reciprocal n-body Collision Avoidance] (0) | 2022.08.10 |
visual assist 단축키 등록하기 (0) | 2022.06.14 |
[git] osx - remote: Invalid username or password. (0) | 2022.06.02 |
- Total
- Today
- Yesterday
- shared_from_this
- 카카오
- 잘못된 빨간줄
- red underline
- 코어 남기기
- it's called a vrpit
- Obstacle Avoidance
- 에러 위치 찾기
- chrome-extension
- ad skip
- 영상 픽셀화 하기
- SuffixArray
- RVO
- 클래스 맴버 변수 출력하기
- Quest2
- print shared_ptr class member variable
- mysql
- vr핏
- C++
- boost
- set value
- 면접
- Golang
- Reciprocal n-body Collision Avoidance
- Visual Studio
- hole-punching
- 봄날에 스케치
- 우리는 vr핏이라고 부릅니다
- cockroach db
- vrpit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |