SQLite3 MSVC로 빌드시 주의사항

소스파일의 기준은 https://www.sqlite.org/download.html 이곳에서 sqlite-autoconf-VERSION.tar.gz 기준. (현재는 3380200)

소스파일 압축본 내 README.txt 파일과 https://www.sqlite.org/howtocompile.html 이곳을 참조하여 nmake "OPTS=-DSQLITE_ENABLE_STAT4=1 -DSQLITE_OMIT_JSON=1" /f Makefile.msc 이렇게 빌드하였다.

이후 sqlite3.lib 파일로 링크하면 링크 오류가 발생하고 lib 파일을 열어다보니 export된 함수가 없다는것을 알 수 있었다. make 중 dumpbin /all sqlite3.lo 명령으로 sqlite3.def 파일을 생성하는 부분이 눈에 보이는데 단순히 버그인지 아니면 MSVC의 버전이 올라가면서 컴파일러 전처리기에 차이가 발생하는건지 sqlite3.def 파일에 export될 함수들이 없어 발생하는 문제인거같다.

stack overflow의 글(https://stackoverflow.com/a/71106434)을 참조하면 식별자 SQLITE_API로 dllexport를 지정하면 된다고 되어있으며 Makefile.msc 파일을 확인해본 결과 DYNAMIC_SHELL=1을 nmake 실행 시 지정하면 되는것으로 파악되었다.

결론: nmake "OPTS=-DSQLITE_ENABLE_STAT4=1 -DSQLITE_OMIT_JSON=1" DYNAMIC_SHELL=1 /f Makefile.msc 이렇게 빌드하면 된다. sqlite3.h, sqlite3.lib, sqlite3.dll 파일들을 적당히 복사하여 사용하면 끗.

ARM 타겟 PHP 빌드 오류 해결

라즈베리파이에 올릴 용도로 buildroot의 LTS판 최신버전(2020.02.8)을 php 포함하여 빌드하는 중 아레와같은 빌드 에러가 발생하였다.

ext/standard/crc32.c:48:10: error: ‘armv8-a’ does not support feature ‘nothing’
 # pragma GCC target ("+nothing+crc")
          ^~~
ext/standard/crc32.c:48:10: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:48:10: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:48:10: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
 static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
 ^~~~~~
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c: In function ‘crc32_aarch64’:
ext/standard/crc32.c:49:1: error: ‘armv8-a’ does not support feature ‘nothing’
ext/standard/crc32.c:49:1: note: valid feature names are: crc simd crypto nocrypto nofp
ext/standard/crc32.c:49:17: error: ‘armv8-a’ does not support feature ‘nothing’
 static uint32_t crc32_aarch64(uint32_t crc, char *p, size_t nr) {
                 ^~~~~~~~~~~~~
ext/standard/crc32.c:49:17: note: valid feature names are: crc simd crypto nocrypto nofp
make[1]: *** [Makefile:967: ext/standard/crc32.lo] Error 1

구글링해보니 해당 파일의 위 에러가 발생하는 “+nothing+crc” 부분을 “arch=armv8-a+crc”로 바꾸니 해결되었다. 일부러 +nothing을 넣은건지 알수없고… 에러 내용도 보면 armv8-a에선 nothing을 지원하지 않는다. 이정도로 해석된다.

저런식으로 일단 빌드 안되게 해둔것이 빌드 대상 아키텍쳐가 crc 명령을 지원하는지 유무를 빌드 된 바이너리 레벨에서 확인이 안되어서 인가? 명령이 지원 안하면 실행 시 에러가 발생할것이니 빌드 레벨에서 대상 타겟이 무엇인지 명시적으로 정의를 하는것 같기도하고 음… 나중에 생각이 나고 기회가 되면 파고들어봐야겠다.

윈도 저장소 폴(저장소 공간)의 성능

저장소 공간은 이미 나온지가 꽤 지난 기술이지만 의외로 정보가 없다. 일단 이 글은 저장소 공간을 설정하는걸 설명하는게 목적이 아니기때문에 설정은 패스. 부실하지만 간략한 방법 및 설명은 [이곳 페이지]에서 확인가능.

그래도 저장소 공간을 만들 때 중요한 부분을 설명하자면

  • 단순(복원 없음) – RAID 0에 해당. 디스크 두개 이상이 모두 이어저 하나로 연결된 형태(1테라 + 1테라 => 2테라). 단점은 하드 중 하나라도 고장나면 모든 데이터가 소실된다.
  • 양방향 미러 – RAID 1에 해당. 모든 디스크에 동일하게 데이터를 기록하는 형태(1테라 + 1테라 => 1테라). 두개 이상의 하드에 동일하게 기록하기때문에 구성 된 하드 중 하나만 정상이고 나머지는 망가져도 데이터는 보존된다.
  • 패리티 – RAID 5에 해당. 이건 좀 복잡하다. 단순하게 생각하면 디스크 세개이상을 두개의 용량으로 사용하면서(1테라 + 1테라 + 1테라 => 2테라) 하나의 디스크가 문제있어도 해당 디스크 교채 후 재구성이 가능하다.

그 외 3방향 미러가있지만 패스. HDD가 다섯개 이상 필요하기도하고 이정도로 구성할 사용자가 개념을 알기위해 이걸 볼 이유가 없을것이기때문(…). 첨언을 하자면 저장소 공간은 기본 할당 가능한 용량보다 높게 설정가능하지만 그 용량 을 넘어서 기록 된 데이터 안정성 보장이 안되므로 추천하고싶지않다.

목적이 아닌 서론은 이정도에서 끝. (참고로 아래 내용은 일부 OS의 환경이나 하드웨어에 따라 다를 수 있으니 모든 사용자에 해당하지 않을 수 있다고 본다.) Continue reading 윈도 저장소 폴(저장소 공간)의 성능

나무커머스 일본 선불유심 사용후기

사용해보고 확인된 유심은 두종류.

직접 써본건 5일 1기가.

가족단위로 일본에 가게되어 여분을 둘 겸 네개 구입하였다. 받아보니 유효기간이 2018년 10월 31일이라 여유롭게 내년에 가볼일이 있으니 쓰게될듯.

아이폰에서도 갤럭시에서도 꼽자마자 잘 인식되었다. 아이폰은 처음엔 3G였다가 LTE로 5~10분정도 지나면 바뀌게된다. 2년정도 전 안드로이드는 3G로만 되다가 데이터 로밍을 끄고 다시 키니까 LTE로 인식이 되었다. 이 유심은 번호가 할당되지않고 데이터 통신만 된다. (장기간 사용자용 유심이 아니면 데이터만 된다고 보면 된다.) 상품 페이지에도 기술되어있지만 데이터 소진 후 256kbps속도로 통신이 된다.

 

이주 전 친구가 써본 7일 4기가.

이건 꼽자마자 개통되지않고 몇분 지나고나서 데이터 사용이 가능했다고한다. 이건 전화번호가 할당되지만 역시나 데이터 통신만되는 유심. 위 5일짜리 유심은 비행기에서 바로 한국 유심으로 교체하여 잘 모르겠지만 이 유심은 한국에서도 데이터통신이 된다. 아래처럼 SKT로 잡히고 무려 4G로 표시된다. 하지만 데이터만 되니까 그리 이득이라고 하기가 힘들다는게 함정. 이건 소진후 128kbps로 속도 제한이 걸린다. (8bps는 초당 1바이트. 128kbps는 초당 16KB, 256kbps로 속도 제한일경우 모바일 페이지가 하나 열리는데 3~6초 정도가 보통 걸리지 않을까 생각된다.) Continue reading 나무커머스 일본 선불유심 사용후기

대만 여행 정리

처음으로 여행을 멋대로 (대충대충) 정리해본다.

먼저 머무를 숙소는 airbnb에서 타이페이의 Xinyi Anhe와 Sun Yat-Sen Memorial Hall역 사이의 숙소로 해결. 하루 숙박비 약 7만원 정도에 거실 하나, 방 두개 더블침대도 두개있는 아파트로 구했다. 호텔로 찾아보았으나 비슷한 가격은 조금 넓은 모텔 정도의 넓이만 주로 보여 그냥 넓고 넉넉하게 방 두개있고 더블침대 두개와 거실이 딸린 곳으로 머무를 곳 선택.

환전은 미국달러(USD)로 한국에서 교환 후 (4박 5일, 개별 35만원 환전) 대만 공항에서 대만달러(TWD)로 교환. 입국 심사 후 공항 밖으로 나가는 길에 환전하는 곳은 사람이 거의 없어 교환하기 좋았다. 35만원 기준으로 1000위안 두장, 나머지 100이나 500짜리로 교환하는것이 좋을것이다. (1000위안으로는 거리에서 먹을것을 사고 돈을 지불하기가 좀 그렇다. 300위안도 안되는것들이 많아서. 천짜리는 보통 편의점에서 써서 낮은 단위로 쪼갠다.)

로밍은 말이 무제한일 뿐 하루 데이터 사용량 1기가 넘으면 속도제한이 있기때문에 선불유심을 살 생각이였지만 친구의 생각대로 포켓 와이파이를 대여받았다. 하지만 포켓와이파이는 잘못된 선택. 구경하는 중 편의를 위해 만날 장소를 정하고 서로 떨어지게 될 경우가 생긴다면 포켓 와이파이로 함께 쓰려는건 좋지못한 선택. 만약의 경우에는 여행중에 서로 떨어지는 경우가 있을 수도 있을테고(…) 그냥 선불 유심을 신청해서 가지고가는편이 오히려 좋다. 선불유심은 (그렇지 않을경우가 있을 수 있으니 알아봐야겠지만) 데이터 제한없이 무조건 4G나 LTE 속도가 유지된다. 로밍 할 돈이면 이쪽이 저렴하거나 차이 거의 없이 제한없이 쓸 수 있다. 어차피 전화 쓸일도 없을뿐더러 카톡 음성이나 영상 통화를 쓰면된다. 대만은 지도에서 myfone을 찾으면 통신사 대리점이 많이 보인다. 미리 구입 못했으면 이쪽을 방문하면 여권을 제출하여 전산처리 및 개통하여 구입가능하다. (물론 말이 안통해서 힘들지도 모르지만, 영업은 보통 오전 11시~12시 부터 시작) Continue reading 대만 여행 정리