본문 바로가기
개발환경/우분투

fatal error: curl/curl.h: No such file or directory

by Kibua20 2020. 7. 28.

리눅스에서 C 언어로 HTTP POST를 구현하기 위해서는 libcurl를 사용해야 하고, 소스 상에서 curl/curl.h 을 include해야 합니다. 이 과정에서 발생할 수 있는 에러와 수정 방법입니다.

 

에러 메시지: fatal error: curl/curl.h: No such file or directory

 

수정 방법:  $ sudo apt install libcurl4-gnutls-dev

리눅스 빌드 환경에서 libcurl.h 가 설치가 안되어 발생하는 에러로  libcurl-dev을 설치하면 간단하게 해결됩니다.  libcurl-dev은 아래와 같이 gnutls, nss, openssl의 virtual package로 시스템에서 설치된 package에 따라서 자동으로 선택이 되는 경우도 있고, 에러가 발생하는 경우도 있습니다. 에러가 발생하는 경우 libcurl-dev 대신 아래 3개 중 하나를 선택해서 설치해야 합니다.   여러 우분투 버전에서 동작을 확인한 결과 libcurl4-gnutls-dev를 설치하는 것이 안전합니다. 

 

libcurl-dev (virtual package)

  • libcurl4-gnutls-dev: development files and documentation for libcurl (GnuTLS flavour)
  • libcurl4-nss-dev: development files and documentation for libcurl (NSS flavour)
  • libcurl4-openssl-dev:development files and documentation for libcurl (OpenSSL flavour)
Virtual package란: (출처)

Sometimes, there are several packages which offer more-or-less the same functionality. In this case, it’s useful to define a virtual package whose name describes that common functionality. (The virtual packages only exist logically, not physically; that’s why they are called virtual.) The packages with this particular function will then provide the virtual package. Thus, any other package requiring that function can simply depend on the virtual package without having to specify all possible packages individually.

All packages should use virtual package names where appropriate, and arrange to create new ones if necessary. They should not use virtual package names (except privately, amongst a cooperating group of packages) unless they have been agreed upon and appear in the list of virtual package names. 

 

Trial #1:  libcurl4-openssl-dev  설치 (에러 발생)

$ sudo apt-get install libcurl4-openssl-dev  (우분투 20.04와 18.04에서 에러, 14.04 정상 동작)

libcurl4-openssl-dev 설치한 경우 우분투 14.04 버전에서는 정상 동작 하나, 20.04와 18.04에서 에러 발생합니다.

 

에러 메시지:
/lib/x86_64-linux-gnu/libcurl.so.4: version `CURL_OPENSSL_3' not found


Tirals #2:  libcurl4-gnutls-dev (정상 동작)

$ sudo apt-get install libcurl4-gnutls-dev (우분투 20.04, 18.04, 14.04 버전에서 정상 동작)

 

20.04 LTS libcurl 설치 상태
libcurl3-gnutls/focal-updates,focal-security,now 7.68.0-1ubuntu2.1 amd64 [설치됨,자동]
libcurl3-gnutls/focal-updates,focal-security,now 7.68.0-1ubuntu2.1 i386 [설치됨,자동]
libcurl4-gnutls-dev/focal-updates,focal-security,now 7.68.0-1ubuntu2.1 amd64 [설치됨]
libcurl4/focal-updates,focal-security,now 7.68.0-1ubuntu2.1 amd64 [설치됨,자동]

16.04 LTS libcurl 설치 상태
libcurl3/xenial-updates,xenial-security 7.47.0-1ubuntu2.14 amd64 [upgradable from: 7.47.0-1ubuntu2.2]
libcurl3-gnutls/xenial-updates,xenial-security 7.47.0-1ubuntu2.14 amd64 [upgradable from: 7.47.0-1ubuntu2.8]
libcurl4-gnutls-dev/xenial-updates,xenial-security 7.47.0-1ubuntu2.14 amd64 [upgradable from: 7.47.0-1ubuntu2.8]

14.04 LTS libcurl 설치 상태
libcurl3/trusty-updates,trusty-security,now 7.35.0-1ubuntu2.20 amd64 [installed]
libcurl3-gnutls/trusty-updates,trusty-security,now 7.35.0-1ubuntu2.20 amd64 [installed]


관련 글

[개발환경] - [실패 사례] gcc 버전이 낮은 상용 리눅스 서버에서 프로그램 설치 시 GLIBCXX' not found 에러

[개발환경] - Ubuntu 에서 SW 개발 Tool 설치

[개발환경] - Windows 10 과 Ubuntu 20.04 설치하기

[모바일 SW 개발/Python] - Python code 숨기는 방법: PyInstaller로 실행 파일 만들기

[개발환경/Google Cloud Platform] - GCP (Google Cloud) 하드 디스크 추가하기 (영구 디스크는 30GB까지 무료)

[모바일 SW 개발/REST API] - JWT(JSON Web Token) Encoding 방법 (Python sample code)

[개발환경] - Ubuntu 20.04에서 sshfs 를 이용한 원격 폴더 마운트

[개발환경] - Ubuntu 동영상 플레이어: VLC Player 설치




댓글2