Microsoft MVP성태의 닷넷 이야기
Linux: 68. busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드 [링크 복사], [링크+제목 복사],
조회: 10236
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 2개 있습니다.)

busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드

BusyBox 이미지를,

# test.dockerfile

FROM busybox:1.28

ENV TZ=Asia/Seoul
RUN DEBIAN_FRONTEND=noninteractive

만들어 놓고,

docker build -t test_app:1.0 -f test.dockerfile .

컨테이너를 생성한 다음,

docker run -v /c/temp:/app --name test_app-instance -w /app --rm -it test_app:1.0 /bin/sh

c:\temp 디렉터리에 gcc로 빌드한 C++ 프로그램을,

#include <cstdio>

int main()
{
    printf("hello from %s!\n", "cpptest");
    return 0;
}

실행했더니, "not found"라고만 나옵니다.

/app # ./cpptest.out
/bin/sh: ./cpptest.out: not found

반면 Ubuntu WSL 환경에서는 (동일한 파일의) cpptest.out 실행이 잘 됩니다. 이와 유사하게 Go 언어도 마찬가지로 기본 빌드로는 "not found" 오류가 나옵니다.




이에 대해 검색해 보면,

How to build a docker build file that can run my c++ program in busybox?
; https://stackoverflow.com/questions/55930279/how-to-build-a-docker-build-file-that-can-run-my-c-program-in-busybox

역시나 이번에도 glibc 링킹 문제입니다. 실제로 busybox에 있는 /bin 디렉터리의 모든 실행 파일들은 "not a dynamic executable" 유형에 속하는 정적 링킹 바이너리입니다.

따라서, busybox를 대상으로 실행하려면 C/C++의 경우 -static 링킹을 해야 하고, GoLang의 경우에는 CGO_ENABLED=0 설정을, C#의 경우에는 StaticExecutable 설정을 해야 합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/17/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 46  47  [48]  49  50  51  52  53  54  55  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12735정성태7/27/202115108.NET Framework: 1081. C# - Azure AD 인증을 지원하는 데스크톱 애플리케이션 예제(Windows Forms) [2]파일 다운로드1
12734정성태7/26/202131941스크립트: 20. 특정 단어로 시작하거나/끝나는 문자열을 포함/제외하는 정규 표현식 - Look-around
12733정성태7/23/202119795.NET Framework: 1081. Self-Contained/SingleFile 유형의 .NET Core/5+ 실행 파일을 임베딩한다면? [1]파일 다운로드2
12732정성태7/23/202113250오류 유형: 742. SharePoint - The super user account utilized by the cache is not configured.
12731정성태7/23/202115284개발 환경 구성: 584. Add Internal URLs 화면에서 "Save" 버튼이 비활성화 된 경우
12730정성태7/23/202116724개발 환경 구성: 583. Visual Studio Code - Go 코드에서 입력을 받는 경우
12729정성태7/22/202115235.NET Framework: 1080. xUnit 단위 테스트에 메서드/클래스 수준의 문맥 제공 - Fixture
12728정성태7/22/202115228.NET Framework: 1079. MSTestv2 단위 테스트에 메서드/클래스/어셈블리 수준의 문맥 제공
12727정성태7/21/202116421.NET Framework: 1078. C# 단위 테스트 - MSTestv2/NUnit의 Assert.Inconclusive 사용법(?) [1]
12726정성태7/21/202116208VS.NET IDE: 169. 비주얼 스튜디오 - 단위 테스트 선택 시 MSTestv2 외의 xUnit, NUnit 사용법 [1]
12725정성태7/21/202114630오류 유형: 741. Failed to find the "go" binary in either GOROOT() or PATH
12724정성태7/21/202117538개발 환경 구성: 582. 윈도우 환경에서 Visual Studio Code + Go (Zip) 개발 환경 [1]
12723정성태7/21/202114487오류 유형: 740. SharePoint - Alternate access mappings have not been configured 경고
12722정성태7/20/202114245오류 유형: 739. MSVCR110.dll이 없어 exe 실행이 안 되는 경우
12721정성태7/20/202115372오류 유형: 738. The trust relationship between this workstation and the primary domain failed. - 세 번째 이야기
12720정성태7/19/202114645Linux: 43. .NET Core/5+ 응용 프로그램의 Ubuntu (Debian) 패키지 준비
12719정성태7/19/202113842오류 유형: 737. SharePoint 설치 시 "0x800710D8 The object identifier does not represent a valid object." 오류 발생
12718정성태7/19/202113884개발 환경 구성: 581. Windows에서 WSL로 파일 복사 시 root 소유권으로 적용되는 문제파일 다운로드1
12717정성태7/18/202114064Windows: 195. robocopy에서 파일의 ADS(Alternate Data Stream) 정보 복사를 제외하는 방법
12716정성태7/17/202115201개발 환경 구성: 580. msbuild의 Exec Task에 robocopy를 사용하는 방법파일 다운로드1
12715정성태7/17/202122389오류 유형: 736. Windows - MySQL zip 파일 버전의 "mysqld --skip-grant-tables" 실행 시 비정상 종료 [1]
12714정성태7/16/202115783오류 유형: 735. VCRUNTIME140.dll, MSVCP140.dll, VCRUNTIME140.dll, VCRUNTIME140_1.dll이 없어 exe 실행이 안 되는 경우
12713정성태7/16/202117132.NET Framework: 1077. C# - 동기 방식이면서 비동기 규약을 따르게 만드는 Task.FromResult파일 다운로드1
12712정성태7/15/202116086개발 환경 구성: 579. Azure - 리눅스 호스팅의 Site Extension 제작 방법
12711정성태7/15/202116099개발 환경 구성: 578. Azure - Java Web App Service를 위한 Site Extension 제작 방법
12710정성태7/15/202118704개발 환경 구성: 577. MQTT - emqx.io 서비스 소개
... 46  47  [48]  49  50  51  52  53  54  55  56  57  58  59  60  ...