반응형

OS: Ubuntu 14.04 (amd64)

g++ version: 4.8.4

Eclipse: Mars, Neon



이클립스(Eclipse)에서 C++2011  문법(std::thread나 향상된 for loop 같은 것)을 쓰려고 하면 빌드 설정에 -std=c++0x 또는 -std=c++11 같은 플래그를 추가해 두어도 정작 에디터에서 계속 syntax error를 표시하는 경우가 있다.


(이클립스 에디터가 C++11 문법에 따라 쓴 std::thread 코드를 

unresolved symbol error로 표시하고 있다.)



해결하려면, 프로젝트 이름에 마우스 오른쪽 단추를 누르고 Properties로 가서,

C/C++ General > Preprocessor Include Paths, Macros etc.로 간 다음,

Providers 탭에서 CDT GCC Build-in Compiler Settings를 선택한다.


그리고 하단에 "Use global provider shared between projects" 선택을 해제하고,

Command to get compiler specs 칸에 -std=c++0x 를 추가한다.


또한 순서상 중간 쯤에 와 있는 CDT GCC Build-in Compiler Settings 항목을 Move Up을 이용해서 가장 위로 끌어올린 뒤에 Apply 버튼과 OK 버튼을 누른다.




마지막으로, 이클립스 메뉴에서 

Project > C/C++ Index > Re-resolve Unresolved Includes

Project > C/C++ Index > Freshen All Files

Project > C/C++ Index > Rebuild

를 차례대로 눌러 주면 에러로 표시하지 않게 된다.


(C++ 2011 문법의 syntax error가 해결된 이후의 에디터 화면)




<참고자료>

[1] http://stackoverflow.com/questions/17457069/enabling-c11-in-eclipse-juno-kepler-luna-cdt



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (amd64)

g++ version: 4.8.4



C++11에 정의되어 있는 thread를 코드에 사용해서 이클립스에서든 Makefile을 직접 써서든 그냥 빌드하면 컴파일 에러가 나는데, 이 때는 -std=c++11 플래그를 추가하라고 나와 있다. [5]

다만 쓰려는 코드가 또 쓰레드이기 때문에 -pthread도 추가하도록 되어 있다.


하지만 위와 같은 플래그를 추가하고 나서도 실행 단계에서 아래와 같은 에러가 나면서 실행이 중단된다.


terminate called after throwing an instance of 'std::system_error'

  what(): Enable multithreading to use std::thread: Operation not permitted


StackOverflow [1, 2]를 보면 gcc의 버그라는 게 결론이고, gcc 패키지에도 버그로 보고되어 있다 [3]. 


해결책으로 특정 flag를 추가해 줘야 한다고 나와 있다.

기본적으로 -Wl,--no-as-needed 를 추가해 주면 된다고 한다.


그런데 내 경우에는 g++ 4.8.4를 쓰고 있어서 flag 하나를 더 추가해 줘야 한다는 댓글이 있어서 최종적으로 -std=c++11 -pthread -lpthread -Wl,--no-as-needed 이렇게 추가를 했더니 빌드와 실행 모두 잘 되었다.


Eclipse CDT에서 설정하는 방법은 [4]에 설명되어 있다. Project Properties에서 C/C++ Build 부분은 빌드할 때 옵션이고, C/C++ General 쪽에 해주는 설정은 아마 에디터에서 보여지는 문법상의 에러를 표시할 때 필요한 것 같은데, 이상하게 에디터 쪽에서는 잘 적용이 되지 않는 것 같았다.




<참고자료>

[1] http://stackoverflow.com/questions/19463602/compiling-multithread-code-with-g

[2] http://chat.stackoverflow.com/transcript/message/12447014#12447014

[3] https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1228201

[4] http://wiki.eclipse.org/CDT/User/FAQ#CDT_does_not_recognize_C.2B.2B11_features

[5] http://stackoverflow.com/questions/9131763/eclipse-cdt-c11-c0x-support



반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 14.04 (amd64)

ns-3 version: 3.26



ns-3를 설치하는 과정에서 Visualizer (PyViz)도 활성화시키려면 python 관련 패키지들 몇개를 미리 설치해야 하는데, ns-3 공식 안내 페이지 [1]에 나온 대로 설치를 시도하면 python-gnomedesktop 패키지를 설치할 수 없다고 나온다.


$ sudo apt-get install python-dev python-pygraphviz python-kiwi python-pygoocanvas python-gnome2 python-gnomedesktop python-rsvg

Reading package lists... Done

Building dependency tree       

Reading state information... Done

E: Unable to locate package python-gnomedesktop



python-gnomedesktop 대신 python-gnome2-desktop-dev 를 설치하면 된다.


$ sudo apt-get install python-dev python-pygraphviz python-kiwi python-pygoocanvas python-gnome2 python-gnome2-desktop-dev python-rsvg



<참고자료>

[1] PyViz, https://www.nsnam.org/wiki/PyViz 

[2] http://stackoverflow.com/questions/36252495/unable-to-locate-package-python-gnomedesktop-installing-pyviz-in-ns3




반응형
블로그 이미지

Bryan_

,
반응형

Host OS: Ubuntu 14.04 (amd64)

Linux Container template: ubuntu



우분투 데스크탑과 우분투 서버에서는 문제가 없었지만, 우분투 템플릿으로 Linux Container (LXC)를 새로 생성하고 나서 새로운 패키지를 추가하려고 하면 add-apt-repository 명령이 없다고 에러 메세지가 나온다.


이 때 먼저 software-properties-common 패키지를 설치하고 나면 add-apt-repository를 쓸 수 있다.


$ sudo apt-get -y install software-properties-common




*참고


참고로 add-apt-repository 명령을 치면 무조건 사용자에게 추가할 것인지 한 차례 물어보고 엔터 키를 치면 진행을 하게 되는데, 여기서 사용자의 입력을 생략하고 무조건 실행되도록 하려면 맨 끝에 -y 옵션을 주면 된다. [1]


$ sudo add-apt-repository ppa:openjdk-r/ppa -y


위 예시는 openjdk 패키지를 설치하기 위한 ppa를 추가한 것이다.


일반적인 우분투 터미널에서는 결국 sudo privilege를 얻기 위해서 사용자 패스워드를 입력해야만 하지만, 적어도 기본적으로 root 계정으로 켜지는 Linux Container의 경우에는 저렇게 해 주면 자동으로 진행되므로 편한 점이 있다.


# add-apt-repository ppa:openjdk-r/ppa -y




<참고자료>

[1] http://askubuntu.com/questions/304178/how-do-i-add-a-ppa-in-a-shell-script-without-user-input




반응형
블로그 이미지

Bryan_

,
반응형

OS: Ubuntu 16.04 (amd64)



새로 설치한 지 얼마 안된 우분투 16.04 머신에서 원래 잘 되던 패키지 설치(apt-get install)가 갑자기 진행이 안되면서 아래와 같이 install-info 를 processing하는 동안 에러가 발생했다는 메세지를 내뱉었다.


아래 출력은 openmpi 관련된 패키지를 설치하려고 시도하면서 발생한 에러를 그대로 가져온 것이다.



skylit@ns3sim:~$ sudo apt-get install libopenmpi1.10 libopenmpi-dev openmpi-common openmpi-bin 

Reading package lists... Done

Building dependency tree       

Reading state information... Done

The following additional packages will be installed:

  autotools-dev libhwloc-dev libhwloc-plugins libhwloc5 libibverbs-dev libibverbs1 libltdl-dev libnuma-dev libtool ocl-icd-libopencl1

Suggested packages:

  libhwloc-contrib-plugins libtool-doc opennmpi-doc autoconf automaken gfortran | fortran95-compiler gcj-jdk opencl-icd gfortran openmpi-checkpoint

The following NEW packages will be installed:

  autotools-dev libhwloc-dev libhwloc-plugins libhwloc5 libibverbs-dev libibverbs1 libltdl-dev libnuma-dev libopenmpi-dev libopenmpi1.10 libtool ocl-icd-libopencl1 openmpi-bin

  openmpi-common

0 upgraded, 14 newly installed, 0 to remove and 267 not upgraded.

1 not fully installed or removed.

Need to get 3,618 kB of archives.

After this operation, 15.5 MB of additional disk space will be used.

Do you want to continue? [Y/n] 

Get:1 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 autotools-dev all 20150820.1 [39.8 kB]

Get:2 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 libltdl-dev amd64 2.4.6-0.1 [162 kB]

Get:3 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 libtool all 2.4.6-0.1 [193 kB]

Get:4 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libhwloc5 amd64 1.11.2-3 [99.5 kB]

Get:5 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 libibverbs1 amd64 1.1.8-1.1ubuntu2 [25.0 kB]

Get:6 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libopenmpi1.10 amd64 1.10.2-8ubuntu1 [2,025 kB]

Get:7 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 openmpi-common all 1.10.2-8ubuntu1 [129 kB]

Get:8 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 openmpi-bin amd64 1.10.2-8ubuntu1 [100 kB]

Get:9 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 libnuma-dev amd64 2.0.11-1ubuntu1 [31.7 kB]

Get:10 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libhwloc-dev amd64 1.11.2-3 [155 kB]

Get:11 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 ocl-icd-libopencl1 amd64 2.2.8-1 [29.7 kB]

Get:12 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libhwloc-plugins amd64 1.11.2-3 [13.2 kB]

Get:13 http://kr.archive.ubuntu.com/ubuntu xenial/main amd64 libibverbs-dev amd64 1.1.8-1.1ubuntu2 [77.6 kB]

Get:14 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 libopenmpi-dev amd64 1.10.2-8ubuntu1 [537 kB]

Fetched 3,618 kB in 1s (2,992 kB/s)      

Setting up install-info (6.1.0.dfsg.1-5) ...

/usr/sbin/update-info-dir: 2: /etc/environment: LC: not found

dpkg: error processing package install-info (--configure):

 subprocess installed post-installation script returned error exit status 127

Errors were encountered while processing:

 install-info

E: Sub-process /usr/bin/dpkg returned an error code (1)

skylit@ns3sim:~$



SuperUser에 찾아보니 /etc/environment 파일을 아래와 같이 고치면 해결된다고 한다.


/etc/environment 파일:

LC_ALL="en_US.UTF-8"


실제로 내가 /etc/environment 파일을 열어 보니, LC와 ALL 사이, 그리고 en과 US 사이가 밑줄이 아니라 공백으로 되어 있었다. (LC ALL="en US.UTF-8"


그런데 나는 해당 파일을 전혀 손댄 적이 없었고, 처음에는 이것저것 패키지 설치가 잘 되었던 기억이 나는데, 도대체 어떻게 고쳐진 것일까? ;;





<참고자료>

[1] "Ubuntu 10.04 - install-info error during update", 
http://superuser.com/questions/129049/ubuntu-10-04-install-info-error-during-update



반응형
블로그 이미지

Bryan_

,