티스토리 툴바



2009/10/07 15:24

Qt 라이브러리를 동적으로 로드하는 응용 프로그램 배포 방법

얼마전 사내 QA를 위해 작업중이던 프로젝트를 릴리즈했습니다.
단순히 사용하는 Qt DLL들만 같이 배포하면 될 줄 알았는데, 생각보다 쉽지 않더군요.

기본 Qt DLL들과 C/C++ Run Time DLL들이 빠진 경우는 실행될 때 이름을 알려주고 죽기 때문에 쉽게 해결할 수 있습니다.

문제는 plugin들이죠.
plugin들은 필요할 때 동적으로 로딩을 하기 때문에 경우에 따라서는 찾기 힘들 수도 있습니다.
죽을때 DLL 파일명도 안 알려줍니다. DependencyWalker로 확인해봤자 안나옵니다...ㅡ,.ㅡ;;
어떤 plugin DLL이 필요한지 알고 나서도 해결이 쉽지 않더군요. 왜냐하면, 놀랍게도 기본 라이브러리 위치가 하드코딩되어 있거든요.. 게다가 plugin들의 기본 폴더 구조를 유지해줘야 합니다...ㅡ,.ㅡa

자세한 내용은 아래 링크를 읽어보길 바라며, 왠만하면 정적으로 묶으세요.. ㅡ.,ㅡ;;

Qt 4.5: Deploying an Application on Windows



Trackback 0 Comment 0
2009/09/21 16:52

C++에서 wfstream을 이용한 Unicode 파일 입출력

오래간만에 여유가 생겨 유니코드 파일 입력 삽질을 해봤습니다. 모든 답은 아래 링크에 있습니다만, 영어 난독증에 몇가지 실수가 겹쳐 결국 하루종일 걸렸네요.

CodeProject Upgrading an STL-based application to use Unicode.. Free source code and programming help

중요한 점만 요약하자면 아래와 같습니다.

- 놀랍게도, C++ 표준상 기본 wfstream은 유니코드를 SBCS 혹은 MBCS 코드로 변환하여 입출력하도록 되어 있습니다.
- 다행히, locale의 codecvt 객체가 코드를 변환을 담당하므로 이 객체를 바꾸면 변환을 막을 수 있습니다.
- 유니코드 파일에서 유니코드 문자열을 읽기 위해서 아무 변환하지 않는 codecvt를 정의하고 객체를 생성하여 현재 locale에 imbue하면 됩니다.
- 주의 사항
  - 파일을 열기 전에 codecvt 객체를 교체해야 한다.
  - Windows 시스템에서는 파일을 binary 모드로 열어야 합니다. 아니면, 0xA(10)을 만날때마다 CR/LF로 변환합니다..ㅡ,.ㅡ;;

이상입니다.

Trackback 0 Comment 0
2009/09/11 20:05

'-fshort-wchar' 옵션

리눅스는 wchar_t 타입이 4바이트입니다.
윈도우 프로그램을 포팅할 때 주로 삽질하는 부분입니다.

다행히 강제적으로 wchar_t를 2바이트로 인식하게 하는 옵션이 있습니다.
바로 '-fshort-wchar'이죠.

머, 가끔 저렇게해도 안되는 경우가 있습니다.
그럴땐 typedef 신공을 쓰시길..
Trackback 0 Comment 0
2009/09/11 20:00

"ln: creating symbolic link 'xxx' to 'yyy': Operation not supported"

qmake로 생성한 makefile로 shared library를 빌드했습니다.
그런데, 마지막에 위와 같은 에러가 발생하더군요.
깨름칙하게시리..

찾아보니 FAT나 NTFS 포맷은 심볼릭 링크를 지원하지 않는다는군요.
VMware의 Shared folder해놓은 폴더에서 빌드했거든요..^^;;


Trackback 0 Comment 0
2009/09/09 21:22

관동 교장 가는 방법

예비군 훈련 다녀왔습니다. 2박 3일동안의 출퇴근 동미참 훈련. 앞으로 3년 더 할 생각을 하니 끔찍하네요..ㅠㅠ

신림 사거리에서 관동 교장까지 가는 방법입니다.
  1. 신림 사거리 정거장에서 도시형 버스 1번 혹은 5530번 버스에 승차
  2. 안양 '교보생명, 왕국예시장, 시외버스 터미널, 안양역' 정거장에서 하차
  3. 1번 마을 버스 승차
  4. 종점인 '관동 교장'에서 하차

시간은 총 1시간 좀 넘게 걸립니다. 1시간 30분 전에 출발하면 넉넉할껍니다.

덧1. 안양역에서 내렸는데 '킹덤' 예식장이 보여도 놀라지 마세요. '왕국' 예식장이니..ㅡ.,ㅡ;;
덧2. 원래 마을 버스 종점은 '박달 교장'이었는데 최근에 연장됐답니다. 그래서 그런지, 기사분들이 안내해 줍니다.
덧3. 왜 '관동'이라는 이름이 붙었는지 살짝 궁금했었는데, 관악구, 동작구의 첫글자를 딴거더군요.
덧4. 이저저도 귀찮으면 관광버스가 편합니다. 출퇴근하면 천원 할인..ㅡ.,ㅡ a

'etc.' 카테고리의 다른 글

관동 교장 가는 방법  (0) 2009/09/09
애드센스 코리아 트위터 오픈!  (0) 2009/07/29
Trackback 0 Comment 0
2009/08/23 22:12

반포 대교

지난주, 소문으로만 듣던 반포 대교에 다녀왔습니다. 맥주마시다 '찍어 볼까나?' 하고 찍은거라 위치나 구도가 별로지만.. 그냥 올려요~~ㅋㅋ


'사진 & 그림' 카테고리의 다른 글

반포 대교  (0) 2009/08/23
싱글당 모임  (1) 2009/08/23
Trackback 0 Comment 0
2009/08/23 22:01

싱글당 모임

어제 팀 싱글들이 모임을 가졌습니다. 먹고 보고 먹고 보고 보고, 마지막으로 소고기와 디저트로 커피를 먹고 헤어진, 상당히 빡신 일정이었죠..^^; 간만에 보람찬 하루었네요.


'사진 & 그림' 카테고리의 다른 글

반포 대교  (0) 2009/08/23
싱글당 모임  (1) 2009/08/23
Trackback 0 Comment 1
2009/08/12 15:52

shared library on Linux

1. shared library 빌드 방법
1.1 소스 컴파일 옵션에 '-fPIC' 옵션 추가
  - 라이브러리가 프로세스 내의 다른 가상 주소로 로드될 수 있도록 하는 옵션
1.2 오브젝트 링크 옵션에 '-shared' 옵션 추가
  - 공유 라이브러리를 생성하는 옵션
  - 정확히 링크하는지는 모르겠음..ㅡ.,ㅡa

2. shared library 링크 방법
2.1 오브젝트 링크 옵션에 '-L라이브러리 경로 -l라이브러리 이름' 추가
  - 라이브러리 이름은 파일명에서 접두사인 'lib'와 확장자인 '.so'를 제거한 것이다.
    - ex) '/usr/lib/libMyLibrary.so' -> '-L/usr/lib -llibMyLibrary'

3. troubleshooting
3.1 error while loading shared libraries: libMyLibrary.so: cannot open shared object file: No such file or directory
    - 공유 라이브러리가 지정된 경로에 없는 경우에 발생함.
    -  '/etc/ld.so.conf' 파일이나 LD_LIBRARY_PATH 환경변수에 라이브러리가 있는 경로를 추가하면 됨.
3.2 skipping incompatible /usr/lib/libMyLibrary.so when searching for -llibMyLibrary
    - 라이브러리를 빌드한 환경과 사용하려는 환경이 다른 경우 발생함.
    - 종류가 다른 컴파일러 혹은 호환 되지 않는 버젼의 컴파일러로 빌드된 경우일 가능성이 높음.

4. 참고 사이트
- shared library 생성
- Program Library HOWTO

Trackback 0 Comment 0
2009/08/06 11:40

Messanger 배너 광고 제거

오늘 따라 유난히 MSN 배너가 눈에 거슬려서 찾아봤습니다.
아래 링크로 따라가서 프로그램 다운받아 실행하면 제거됩니다~~
복구 기능도 있긴해요.

Live Advert Remover

최신 네이트온 광고 제거 프로그램은 아래 포스팅에 업데이트 되고 있습니다~~

네이트온 4.0 광고 제거 패치

'유용한 프로그램' 카테고리의 다른 글

Messanger 배너 광고 제거  (0) 2009/08/06
Google 크롬 북마크 추출하는 방법  (0) 2009/07/02
한글 CLCLClip v1.05  (0) 2008/04/23
Trackback 0 Comment 0
2009/07/31 00:02

VMware에 설치된 가상 Ubuntu에 NFS 서버 설정하기

현재 작업하는 타겟 보드는 소스를 NFS를 통해서 가져옵니다. Windows에 NFS를 설치할려고 삽질해봤지만 잘안되더군요. 그래서 VMware에 설치해둔 Ubuntu를 사용할 수 있는지 알아보니 가능하더군요. 아래처럼 하면 됩니다.


1. 브릿지 네트워크로 설정
- 우선 가상 Ubuntu의 네트워크 설정을 Bridged Network로 설정해야 합니다. 그래야, 외부 컴퓨터에서 접근이 가능합니다. 저는 NAT를 사용하고 있었는데, 이건 호스트 컴퓨터가 라우터 역활을, 즉 공유기를 통해서 연결한 거와 같다고 합니다.
- 데스크탑이라면 'Replicate physical network connection state' 옵션은 꺼도 될 것 같습니다. 자세한 설명을 아래 링크를 참조하세요.
- VMware - Replicate physical network connection state
- 설정화면

사용자 삽입 이미지


2. IP 지정
- 저는 고정 IP를 사용해서, DHCP에서도 가능한지는 모르겠습니다. 테스트해보고 알려주시면 감사~~^^;;
- IP 변경 후 아래 명령을 통해서 데몬을 재시작 했는데 IP가 갱신되지 않더군요. 그래서.. 여러 번 재부팅했습니다..ㅡ.,ㅡa
    - sudo /etc/init.d/networking restart


3. NFS 서브 프로그램 설치
- sudo apt-get install nfs-kernel-server


4. NFS 서버 설정, 즉 공유 폴더 설정
- /etc/exports 파일 수정에 아래 세번째 링크를 참고해서 공유폴더를 추가하면 됩니다.
- 설정 화면

사용자 삽입 이미지


5. NFS 데몬 재실행
- sudo /etc/init.d/nfs-kernel-server restart

- sudo exportfs -r

   - 수정된 /etc/exports 파일 반영하는 명령어 임.


이제 클라이언트에서 접속하면 될껍니다~

덧. 참고 사이트
Trackback 0 Comment 1