C and C++
-
[Mac OS] gcc 빌드시 Security Framework 링크C and C++ 2020. 3. 4. 00:02
Mac OS에서 gcc(정확히는 g++)을 이용한 빌드 중에 Undefined Symbol이 발견되었다. Undefined symbols for architecture x86_64: "_SSLClose", referenced from: ... 같은 커밋으로 리눅스에서는 멀쩡히 돌아가던 빌드였다. 간단히 원인을 찾을 수 있으리라 생각했지만, 검색해도 _SSLClose가 무슨 심볼인지도 몰라 간단하지가 않았다. 마음을 진정시키고 nm으로 OpenSSL 심볼들을 하나하나 조사까지 했는데 거기서도 나오지 않았다. 알고보니, 구글을 뒤지다 처음엔 무심코 지나간 여기에 해답이 있었다. If anyone is getting linker errors about missing "_SSLClose" and similarl..
-
libmongoc 소스 코드 빌드C and C++ 2020. 2. 20. 20:57
프로젝트에서 MongoDB를 사용해 보기로 했다. 아무래도 근래 제일 점유율이 높은 대세이기도 하고, 무엇보다 C로 되어있는 점이 가장 마음에 들었다. MongoDB 사용을 위해서는 먼저 MonngoDB 서버가 어딘가에 설치되어야 하고, 여기에 접근하기 위한 플랫폼별 클라이언트 Driver를 통해 서버에 접속하게 된다. 헷갈리는 용어 덕분에 처음엔 Native 단의 Device Driver를 제공하는 것으로 착각했다. 알고보니 그냥 플랫폼별로 빌드된 라이브러리였다. 다음 페이지에서 플랫폼별 드라이버를 확인할 수 있다. https://docs.mongodb.com/ecosystem/drivers/ 서버 설치 먼저 MongoDB의 서버는 플랫폼 별로 설치 가이드가 잘 나와 있었다. 우분투의 경우 다음 페이지..
-
C/C++ localtime 함수로 현재 시간 출력하기C and C++ 2019. 12. 8. 23:40
윈도우에서는 서비스나 독립된 exe 형태로 구동되고, 리눅스에서는 데몬으로 구동되는 UI가 없는 형태의 네이티브 모듈을 만들고 있었다. 그런데 모듈에 필요한 기능 중 현재의 시간을 구해 계산할 필요가 있는 부분이 나타났다. OS 플랫폼마다 시간을 구하는 방법은 다양하지만, 되도록 양쪽 플랫폼에서 모두 사용 가능한 하나의 코드베이스를 유지하는 기조를 가지고 있었다. 그리고 마이크로 세컨드 단위의 정확한 시간이 필요한 것은 아니어서, 웬만하면 오픈소스 라이브러리를 가져다 쓰지 않고 해결하고 싶기도 했다. 이 조건을 만족하는 함수가 다행히 C의 기본 라이브러리에 있었는데 localtime함수가 그것이다. 리눅스 링크는 여기에서 찾을 수 있으며, 윈도우 링크는 여기에서 찾을 수 있다. 사용 방법은 아주 간단한데..
-
[우분투] libcurl 빌드 에러 수정 (--with-ssl, --with-zlib)C and C++ 2019. 11. 18. 13:59
프로젝트에서 libcurl을 static library 형태로 포함해 사용하고 있다. 이전에는 프로젝트를 우분투 14.04 그리고 osx에서 빌드하고 테스트를 했었는데, 이번에 우분투 18.04에서 프로젝트를 빌드하니 다음과 같은 링킹 에러가 나타났다. ... md5.o:md5.c:(.rdata+0x0): undefined reference to `MD5_Init' md5.o:md5.c:(.rdata+0x4): undefined reference to `MD5_Update' md5.o:md5.c:(.rdata+0x8): undefined reference to `MD5_Final' md5.o:md5.c:(.rdata+0x14): undefined reference to `MD5_Init' md5.o:md..
-
리눅스 gcc 빌드시 Undefined reference to dlopen 에러C and C++ 2019. 11. 18. 13:37
static Library를 포함하는 타겟 바이너리를 빌드하는 중에 황당한 에러를 만났다. ~/xxxlib.so: Undefined reference to 'dlsym' ~/xxxlib.so: undefined reference to `dlsym' ~/xxxlib.so: undefined reference to `dlerror' ~/xxxlib.so: undefined reference to `dlopen' ~/xxxlib.so: undefined reference to `dlclose' 링크에 실패한 dlxxx 함수는 다이나믹 라이브러리를 런타임에 사용하기 위한 함수이다. (참조) 기억을 더음으며 소스코드를 살펴보니 빌드시 포함시킨 static library 중 하나에 dl계열 함수가 들어있었다. gc..
-
[CMake] Linking Static Library (정적 라이브러리 링크) 하기C and C++ 2019. 5. 19. 16:14
CMake Script를 사용하면서 소스의 일부분인 Static Library (정적 라이브러리)나 외부에서 복사한 Satatic Library를 타겟에 링크하려는 경우가 생긴다. 내 경우에는 소스 내부에서 빌드한 라이브러리는 링크가 잘 되었다. 그런데 특정 버전의 OpenSSL을 사용하여야 했는데, 빌드 툴에 포함된 버전만 링크가 되고 새로 빌드하여 CMake Script에 포함한 라이브러리가 무시되는 경우가 발생해 난감했다. 뭔가 고상하게 해결을 해보고 싶었으나 전체 Path를 지정하는게 가장 깔끔하게 해결되었기에 방법에 대해 남겨본다. 1. External Library 링크 빌드하려는 Target이 main.c에서 빌드된 main이라 가정하고, 링크하려는 정적 라이브러리가 프로젝트 소스 디렉토리 ..