Visual studio 에서 작업을 하다 보면 중복되는 헤더 파일들의 컴파일 시간을 줄이기 위해 '미리 컴파일된 헤더'를 사용하는 경우가 종종 있다. 이 때 자주 볼 수 있는 에러가 바로 아래 에러이다.


fatal error C1083: 미리 컴파일된 헤더 파일을 열 수 없습니다. '파일.pch': No such file or directory


이 경우 stdafx.cpp 파일의 '미리 컴파일된 헤더' 항목이 만들기 (/Yc) 로 설정되어 있지 않아 에러가 발생하는 것이다. 아래 2번 항목을 따라 설정해주고 '다시 빌드'하면 정상적으로 컴파일이 된다.



** 미리 컴파일된 헤더 사용 방법 **


1. "프로젝트 속성 > 구성 속성 > C/C++ > 미리 컴파일된 헤더 > 미리 컴파일된 헤더" 항목을 사용 (/Yu) 으로 바꾸어 미리 컴파일된 헤더를 설정한다.


2. 대응되는 cpp 파일에서도 "파일 속성 > 구성 속성 > C/C++ > 미리 컴파일된 헤더 > 미리 컴파일된 헤더" 항목을 만들기 (/Yc) 로 해준다.


정리하자면, 미리 컴파일된 헤더인 stdafx.h 파일은 사용 (/Yu) 로 설정하고, stdafx.cpp 파일에는 만들기 (/Yc) 로 설정되어 있어야 컴파일이 진행된다.




맥북에 Boot Camp를 이용해 Windows7 설치하기


준비물: Mac, Windows7 ISO 파일, 4G 이상 USB


0. Mac OS 상태에서 시작

1. Windows7 DVD ISO 파일을 Mac에 복사한다. 

2. Mac에 USB(4G 이상, 추후 포맷 됨)를 꽂고 Bootcamp Assistant를 실행한다. (spotlight에서 bootcamp를 찾으면 나옴)

3. 모든 탭을 체크한 후 진행하면 알아서 Windows 설치에 필요한 파일들을 USB에 저장한다.

4. 중간에 Wifi가 끊기거나 맥이 sleep모드에 들어가면 "Can't download Windows Support Software because of a network problem"라는 에러가 발생하는데 이 때는 맥을 재시작 한 후 네트워크가 끊기지 않도록 하고, caffeine 같은 앱을 이용해 sleep 모드에 들지 않도록 한 후 다시 시도해본다.

5. USB에 저장하는 과정이 끝나면 디스크 파티션을 나눈다. (60G 정도 필요)

6. 계속 진행하면 자동으로 맥이 재시작하며 윈도우 설치를 시작한다.

7. Windows 설치 도중 종료되면 "No bootable device - insert boot disk and press any key"라는 메세지가 나오는데 이 때에는 종료버튼을 이용해 재부팅한 후 alt(Option) 키를 눌러 OSX로 부팅한다. 그 후 bootcamp assistant를 실행해 파티션을 없애고 다시 파티션을 나누어 설치를 진행한다.

8. Windows가 설치되고 나서 USB의 bootcamp 폴더에 있는 setup.exe를 실행하면 필요한 드라이버를 순서대로 설치해준다.


이렇게 하면 윈도우 설치 끝!


- Boot Camp를 이용해 윈도우를 설치하면 기본적으로 윈도우로 부팅이 되는데 만약 OSX로 부팅을 하고 싶으면 전원 버튼을 눌러 컴퓨터를 켠 후 바로 alt(option) 키를 계속 누르고 있으면 부팅할 운영체제를 선택할 수 있는 창이 나온다.


- 기본 부팅을 OSX으로 바꾸고 싶으면 OSX로 부팅한 후 상단 메뉴바의 사과 버튼을 누르고 "시스템 환경설정"의 "시동디스크"에서 Boot Camp가 아닌 Macintosh HD를 선택하면 된다.

ECCV14 RCCN 코드 빌드 중 liblinear 라이브러리가 빌드되지 않는 문제가 생겼다.


matlab에서 rcnn_build(); 수행 시

tron.cpp:(.text+0x223): undefined reference to 'dnrm2_' 류의 에러가 많이 발생했다.


이는 blas 에 속한 함수들을 static library로 링크하지 못해 생긴 문제로 rcnn_build() 대신 수동으로 make 했다.


eccv14-code/rcnn/external/liblinear-1.94/matlab/Makefile 에서 아래 부분을 수정한다.


3번 줄의 MATLABDIR 을 matlab 경로로 바꿔준다.

MATLABDIR ?= /usr/local/MATLAB/R2014b


10번 줄의 MEX_OPTION을 아래와 같이 수정한다.

MEX_OPTION = CC\=$(CXX) CXX\=$(CXX) CFLAGS\="$(CFLAGS)" CXXFLAGS\="$(CFLAGS)"


33번 줄의 뒤에 -outdir .. -output liblinear_train 을 추가하여 아래와 같이 만든다.

$(MEX) $(MEX_OPTION) train.c ../tron.o ../linear.o linear_model_matlab.o ../blas/blas.a -outdir .. -output liblinear_train


make 하면 rcnn/external/liblinear-1.94 디렉토리에 liblinear_train.mex64 파일이 생성된다.



error while loading shared libraries: libcudart.so.6.5: cannot open shared object file: No such file or directory


CAFFE 실행 중 위와 같은 오류가 발생했다.

libcudart.so.6.5 라이브러리를 찾지 못해 발생한 오류로 아래와 같이 환경 변수를 추가하면 해결된다.


export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64


만약 위 환경 변수를 영구적으로 사용하고 싶으면

~/.profile 파일의 마지막 줄에 위의 명령어를 추가한 후 터미널에서 . ~/.profile 을 실행하면 추가된다.


환경 변수의 확인은

echo $LD_LIBRARY_PATH

로 할 수 있다.

환경 변수는 env 명령어를 통해 확인할 수 있다.

대표적인 환경 변수로는 PATH 가 있다.


환경 변수를 수정하기 위해서는 

export PATH=$PATH:/usr/local/matlab

과 같이 콜론을 통해 추가할 수 있다.

이 경우 변경된 환경 변수는 현재 터미널에만 적용된다.


변경된 내역을 영구적으로 저장하고 싶으면

~/.profile 파일에 위의 명령어를 삽입한다.

그리고 . ~/.profile 을 실행하면 변경한 내용이 영구적으로 적용된다.

MATLAB 사용 중 아래와 같은 에러가 발생하면 라이브러리를 로드할 메모리가 부족해 발생하는 문제일 가능성이 크다.


invalid mex-file ...  dlopen: cannot load any more object with static TLS


이 경우 MATLAB HOME > Preferences > General > Java Heap Memory 에서 Heap size 를 늘려주면 해결 가능하다.

Stanford 에서 만든 Image processing 라이브러리인 ImageStack을 설치했다.


설치방법

1. ImageStack 코드를 다운받는다. (https://code.google.com/p/imagestack/)


2. Makefile의 첫 줄의 MATLAB_ROOT_DIR을 MATLAB이 설치된 디렉토리로 바꿔준다.


3. 빌드한다.

make -j 16


4. 만약 빌드 중 'close' was not declared in this scope.' 에러가 발생하면 main.h 의 9번 줄에 #include <unistd.h> 를 추가해준다.




코드 컴파일 중 boost 라이브러리가 없어 설치를 했다.


설치 방법

sudo apt-get install libboost-all-dev

빌드 중 'make: protoc: Command not found' 메세지와 함께 빌드가 안되는 문제가 생겼다.

protoc는 Google 에서 개발한 언어, 플랫폼에서 자유로운 메세지 전송 방법인 Protocol Buffer 이다.


설치 방법

1. https://developers.google.com/protocol-buffers/ 에서 코드를 다운 받는다. (protobuf-2.6.0.tar.gz)


2. 다운받은 폴더로 이동해 압축을 풀고 폴더로 들어간다.

tar -xf protobuf-2.6.0.tar.gz

cd protobuf-2.6.0


3. 아래 명령을 통해 빌드한다.

sudo ./configure

sudo make

sudo make check

sudo make install


4. 설치가 되었는지 확인한다.

protoc --version


5. 만약 위에서 오류가 발생하면 아래와 같이 해본다.

sudo ldconfig

protoc --version

1. GUI를 통해서는 System Settings/Network 를 통해 Windows처럼 변경 가능하다.



2. Terminal에서 변경할 경우 IP 설정이 포함된 파일은 /etc/network/interfaces 이며 아래 명령어를 통해 변경한다.

  sudo vi /etc/network/interfaces


수정할 내용은 다음과 같다.


고정 IP의 경우

auto lo eth0

iface lo inet loopback

iface eth0 inet static

address 123.123.123.123 (사용할 IP)

netmask 255.255.255.0

gateway 123.123.123.1 (사용할 gateway)

dns-nameservers 123.123.1.1 8.8.8.8 (사용할 DNS)


DHCP의 경우

auto lo eth0

iface lo inet loopback

iface eth0 inet dhcp


여기서 auto 는 lo, eth0, eth1과 같이 설정할 랜카드를 지정하는 명령이다.

lo와 loopback은 PC 내부 통신을 위한 설정이다.

eth0은 랜카드를 의미하며 DHCP 혹은 STATIC 방식을 선택하여 설정할 수 있다.



3. 마지막으로 아래 명령을 통해 네트워크 설정을 불러오면 된다.

  sudo service network-manager restart


기존에 많이 사용하던 sudo service networking restart 나 sudo /etc/init.d/networking restart 는 Ubuntu 최신 버전에서 잘 동작하지 않는 것 같다.



+ Recent posts