Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

C# - libdl.so를 DllImport로 연결 시 docker container 내에서 System.DllNotFoundException 예외 발생

dlopen Linux API 호출을 C#에서 호출 시 다음과 같이 연결할 수 있습니다.

[DllImport("libdl.so", CharSet = CharSet.Ansi)]
internal static extern IntPtr dlopen(string filePath, RTLD flag);

테스트하던 데스크톱 용 Ubuntu, CentOS에서는 잘 되었는데 docker container로 넘어오니 저 호출들이 모두 "System.DllNotFoundException" 예외가 발생합니다. 아무래도 container 환경의 최소화된 환경 구성 때문으로 보이는데요, 실제로 libdl.so 파일은 없고 버전이 지정된 파일들만 container 내에 있는 것을 확인할 수 있습니다.

/lib/x86_64-linux-gnu/libdl-2.28.so, libdl-2.28.so

그리고 저렇게 버전이 지정된 것들에 대한 link로 libdl.so.2가 있습니다.

root@64ba15407ad4:/app# ls /lib/x86_64-linux-gnu/libdl* -l
-rw-r--r-- 1 root root 14592 May  1  2019 /lib/x86_64-linux-gnu/libdl-2.28.so
lrwxrwxrwx 1 root root    13 May  1  2019 /lib/x86_64-linux-gnu/libdl.so.2 -> libdl-2.28.so

사내 동료에게 물어보니 근래의 리눅스 환경으로 볼 때 libdl.so.2로 의존성을 걸어도 호환성에 거의 문제가 되지 않을 거라 합니다. 게다가 .NET Core라면 그것 자체가 아주 오래된 리눅스 운영체제는 지원하지 않으므로 (제 사견으로도) libdl.so보다는 libdl.so.2로 지정하는 것을 더 권장합니다.




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



donaricano-btn



[최초 등록일: ]
[최종 수정일: 8/5/2020 ]

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

비밀번호

댓글 쓴 사람
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
12382정성태11/13/2020426오류 유형: 671. dotnet build - The local source '...' doesn't exist
12381정성태10/26/2020479VC++: 137. C++ stl map의 사용자 정의 타입을 key로 사용하는 방법파일 다운로드1
12380정성태10/26/2020296오류 유형: 670. Visual Studio - Squash_FailureCommitsReset
12379정성태10/26/2020566.NET Framework: 955. .NET 메서드의 Signature 바이트 코드 분석파일 다운로드2
12378정성태10/20/2020610.NET Framework: 954. C# - x86/x64 환경에 따라 달라지는 P/Invoke 함수의 export 이름파일 다운로드1
12377정성태10/29/2020653디버깅 기술: 172. windbg - 파일 열기 시점에 bp를 걸어 파일명 알아내는 방법(Managed/Unmanaged)
12376정성태10/15/2020418오류 유형: 669. windbg - sos의 name2ee 명령어 실행 시 "Failed to request module list." 오류
12375정성태10/15/2020749Windows: 177. 윈도우 탐색기에서 띄우는 cmd.exe 창의 디렉터리 구분 문자가 'Yen(¥)' 기호로 나오는 경우 [1]
12374정성태11/22/2020878.NET Framework: 953. C# 9.0 - (6) 함수 포인터(Function pointers) [1]파일 다운로드2
12373정성태10/14/2020434.NET Framework: 952. OpCodes.Box와 관련해 IL 형식으로 직접 코딩 시 유의할 점
12372정성태11/22/2020700.NET Framework: 951. C# 9.0 - (5) 로컬 함수에 특성 지정 가능(Attributes on local functions)파일 다운로드1
12371정성태10/13/2020339개발 환경 구성: 519. Visual Studio의 Ctrl+Shift+U (Edit.MakeUppercase) 단축키가 동작하지 않는 경우
12370정성태10/13/2020489Linux: 33. Linux - nmcli를 이용한 고정 IP 설정
12369정성태10/21/20201566Windows: 176. Raymond Chen이 한글날에 밝히는 윈도우의 한글 자모 분리 현상 [1]
12368정성태10/12/2020429오류 유형: 668. VSIX 확장 빌드 - The "GetDeploymentPathFromVsixManifest" task failed unexpectedly.
12367정성태10/12/2020527오류 유형: 667. Ubuntu - Temporary failure resolving 'kr.archive.ubuntu.com'
12366정성태11/22/2020680.NET Framework: 950. C# 9.0 - (4) 원시 크기 정수(Native ints) [1]파일 다운로드1
12365정성태11/22/2020613.NET Framework: 949. C# 9.0 - (3) 람다 메서드의 매개 변수 무시(Lambda discard parameters)파일 다운로드1
12364정성태11/22/2020743.NET Framework: 948. C# 9.0 - (2) localsinit 플래그 내보내기 무시(Suppress emitting localsinit flag)파일 다운로드1
12363정성태11/22/20201156.NET Framework: 947. C# 9.0 - (1) 대상으로 형식화된 new 식(Target-typed new expressions) [2]파일 다운로드1
12362정성태10/11/2020474VS.NET IDE: 151. Visual Studio 2019에 .NET 5 rc/preview 적용하는 방법
12361정성태10/19/2020758.NET Framework: 946. C# 9.0을 위한 개발 환경 구성
12360정성태10/8/2020334오류 유형: 666. The type or namespace name '...' does not exist in the namespace 'Microsoft.VisualStudio.TestTools' (are you missing an assembly reference?)
12359정성태10/7/2020523오류 유형: 665. Windows - 재부팅 후 iSCSI 연결이 끊기는 문제
12358정성태10/7/2020429오류 유형: 664. Web Deploy 설치 시 "A newer version of Microsoft Web Deploy 3.6 was found on this machine." 오류
12357정성태10/7/2020381오류 유형: 663. 이벤트 로그 - The storage optimizer couldn't complete retrim on New Volume
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...