문제

Windows의 DLL과 같은 휴대용 방식으로 공유 객체 파일을 사용할 수 있습니까 ??

Linux에 사용할 준비가 된 컴파일 라이브러리를 제공 할 수있는 방법이 있는지 궁금합니다. 같은 방식으로 Windows에서 DLL을 컴파일 할 수 있으며 다른 Windows에서 사용할 수 있습니다 (OK, 다른 사람은 아니지만 대부분은 가능).

Linux에서 가능합니까?

편집하다:
방금 일어 났고 답을 읽었습니다. 아주 좋은 것들이 있습니다.
소스 코드를 숨기려고하지 않습니다. 나는 이미 컴파일 된 사용이 가능할 수있는 라이브러리를 제공하고 싶습니다. 따라서 컴파일에 대한 경험이없는 사용자는 스스로 할 필요가 없습니다.
따라서 아이디어는 가능한 많은 다른 리눅스에서 작동하는 .so 파일을 제공하는 것입니다.
라이브러리는 STL 및 부스트 라이브러리를 사용하여 C ++로 작성되었습니다.

도움이 되었습니까?

해결책

고도로 고도로 LSB 앱 / 라이브러리 검사기를 사용하는 것이 좋습니다. 당신이 당신에게 빨리 알려줄 것입니다 :

  • 일부 배포판에서 사용할 수없는 확장 기능을 사용하고 있습니다
  • 설치 스크립트에 Bash-Isms를 소개하십시오
  • 최근의 모든 커널에서 사용할 수없는 SYSCALLS를 사용하십시오
  • 비표준 라이브러리에 의존합니다 (배포판이 부족한 배포판을 알려줄 것입니다)
  • 그리고 많은 다른 좋은 수표에 많은

당신은 얻을 수 있습니다 자세한 내용은 여기에 있습니다 도구를 다운로드 할뿐만 아니라 실행하기 쉽습니다. 그냥 틀리지 않고, Perl 스크립트를 실행하고 LocalHost에서 브라우저를 가리 킵니다. 나머지는 브라우저 구동입니다.

이 도구를 사용하여 라이브러리 / 앱 LSB 인증을 쉽게 가져 와서 두 버전 모두에 걸쳐 배포판 패커의 작업을 훨씬 쉽게 만들 수 있습니다.

그 외에도 Libtool (또는 이와 유사한)과 같은 것을 사용하여 라이브러리가 올바르게 설치되어 있는지 확인하고 DSO와 연결하고 싶지 않은 사람들에게 정적 객체를 제공합니다 (대부분의 분포에 라이브러리가 나타나는 데 시간이 걸립니다. , 휴대용 프로그램을 작성하면, 나는 그것이 존재하는 것을 믿을 수 없습니다.) 공개 인터페이스에 대해 잘 언급합니다.

도서관의 경우, 나는 그것을 발견합니다 독사 최고로 작동합니다. 문서는 매우 중요합니다. 주어진 작업에 사용할 라이브러리 선택에 반드시 영향을 미칩니다.

실제로, 앱 검사기를 확인하십시오. 이는 라이브러리를 야생에 꺼내서 달리 얻는 데 1 년이 걸리는 휴대 성 문제 보고서를 제공 할 것입니다.

마지막으로 도서관을 쉽게 떨어 뜨릴 수 있도록 노력하십시오. 따라서 정적으로 연결할 필요가 없습니다. 내가 말했듯이, 대부분의 분포에서 일반화되기까지 몇 년이 걸릴 수 있습니다. 코드를 잡고 SRC/LIB에 떨어 뜨리고 라이브러리가 일반적인 경우까지 사용하는 것이 훨씬 쉽습니다. 제발 제발 .. 단위 테스트를 해주세요. 수도꼭지 (모든 프로토콜을 테스트)는이를 수행 할 수있는 좋은 휴대 방식입니다. 내가 당신의 도서관을 해킹한다면, 나는 그것을 깨뜨 렸다면, 특히 나무에서 수정할 때 또는 그것을 빨리 알아야합니다. al (DSO가 존재하는 경우).

다른 팁

사용자가 컴파일 된 코드를 제공함으로써 사용자를 돕고 싶다면, 내가 아는 가장 좋은 방법은 이진을 실행할 수있는 방법을 정적으로 연결된 바이너리 + 문서를 제공하는 것입니다. (이것은 아마도 소스 코드를 제공하는 것 외에도 가능합니다.) 대부분의 정적으로 연결된 바이너리는 동일한 아키텍처의 대부분의 Linux 분포 (+ 32 비트 (x86) 정적으로 연결된 바이너리가 64 비트 (AMD64)에서 작동 함)에서 작동합니다. Skype가 정적으로 연결된 Linux 다운로드를 제공하는 것은 놀라운 일이 아닙니다.

도서관 질문으로 돌아갑니다. Linux에서 공유 라이브러리를 작성하는 전문가에 속해 있고, 공유 라이브러리가 이전 및 새로운 버전을 포함하여 다른 Linux 배포판에서 작동하도록 의존성을 최소화하기 위해 시간을내어 시간을내어 작동 할 수있는 방법이 없습니다. 앞으로 (예 : 2 년). 아마도 .so 파일을 유지하고, 즉 작은 수정을 반복해서 유지할 수있을 것입니다. 이것은 오랫동안 재미가 없으며 생산성을 크게 줄입니다. 라이브러리 호환성을 유지하는 데 소비하는 시간은 소프트웨어의 기능, 효율성, 보안 등을 개선하는 데 훨씬 더 잘 보냈을 것입니다.

또한 시스템에서 작동하지 않는. (그리고 당신은 그것을 작동시킬 수있는 초강대국이 없습니다. 모두 Linux Systems,이 상황은 불가피합니다.) x86, powerpc, Arm 등을 포함하여 32 비트 및 64 비트도 제공합니까? .SO 파일이 Debian, Ubuntu 및 Red Hat에서만 작동하는 경우 (파일을 더 많은 배포판으로 포트 할 시간이 없기 때문에) Suse 및 Gentoo 사용자 (및 그 이상)를 화나게 할 것입니다.

이상적으로는 GNU를 사용하고 싶을 것입니다 autoconf, Automake, 그리고 libtool 구성을 만들고 스크립트를 작성하려면 생성 된 구성 및 makefile.in 파일로 라이브러리를 소스로 배포하십시오.

여기에 있습니다 온라인 책 그들에 대해.

./configure; make; make install Linux에서 상당히 표준입니다.

문제의 근본은 Linux가 많은 다른 프로세서에서 실행된다는 것입니다. Windows와 같은 X86 지침을 지원하는 프로세서에 의존 할 수는 없습니다 (대부분의 버전 : Itanium (XP 및 Newer) 및 Alpha (NT 4.0)는 예외입니다).

문제는 Linux 용 공유 라이브러리를 개발하는 방법입니다. 당신은 볼 수 있습니다 이 튜토리얼 또는 포그램 라이브러리 Howto.

나는 당신이 무엇을 요구하는지 알고 있습니다. Windows의 경우 MSFT는 DLL을 모두 호환 가능하게 만들었으므로 DLL은 일반적으로 거의 모든 버전의 Windows와 호환되므로 "휴대용"이라고 부릅니다.

불행히도 Linux에는 너무 많은 변형이 있으며 (모두가 돈을 벌기 위해 "다른"것으로 생각하고 있습니다) Windows와 동일한 혜택을 얻을 수 없으므로 다른 배포판, 배포판 버전, 배포판, 배포판 버전을 위해 컴파일 된 동일한 패키지가 많이 있습니다. CPU 유형, ...

어떤 사람들은 문제가 (CPU) 아키텍처로 인해 발생한다고 말하지만 그렇지 않습니다. 같은 아치에서도 분포 사이에는 여전히 다릅니다. 바이너리 패키지를 실제로 출시하려고 시도하면 C 런타임 라이브러리 종속성조차도 유지하기가 어렵습니다. Linux OS는 너무 많은 것들이 없기 때문에 거의 모든 서비스에는 종속성 문제가 포함됩니다.

일반적으로 일부 분포와 호환되는 바이너리 만 빌드 할 수 있습니다 (또는 운이 좋은 경우 여러 분포). 그렇기 때문에 Ubuntu, Debian 또는 RH와 같은 배포판에 묶이지 않는 한 바이너리에서 Linux 프로그램을 출시하는 이유는 항상 이진으로 망가졌습니다.

.so 파일을 /usr /lib에 넣는 것만 5월 작업이지만, 배포판이 라이브러리 관리에 대한 계획을 엉망으로 만들 것입니다.

Linux Standard Base를 살펴보십시오. Linux 배포판 중 공통 플랫폼에서 가장 가까운 것입니다.

http://www.linuxfoundation.org/collaborate/workgroups/lsb

당신은 무엇을 성취하려고합니까?

Tinkertim의 대답이 자리 잡고 있습니다. 나는 변화를 이해하고 계획하는 것이 중요하다고 덧붙였다. GCC의 ABI. 최근에 상황이 상당히 안정적이며 모든 주요 배포판이 GCC 4.3.2 정도에 있다고 생각합니다. 그러나 몇 년마다 일부 ABI로 변경 (특히 C ++ 관련 비트)는 적어도 크로스 디스트로 바이너리를 출시하려는 사람들과 실제로 달리는 것보다 다른 배포판에서 패키지를 집어 들었던 사용자에게는 신체 상해를 일으키는 것으로 보입니다. 이러한 전환 중 하나가 진행되는 동안 (모든 배포판 업그레이드 자체의 속도) 사용자가 사용중인 전체 범위의 GCC 버전을 지원하는 ABI와 함께 LIBS를 출시하려고합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top