Linux에서 컴파일된 프로그램의 다른 여러 Linux 계열에서 실행

neohwang의 이미지

Linux 환경에서 C언어로 제작된 프로그램을 배포할려고 합니다.
실행파일만 배포해야 되는데, 리눅스의 여러 버전으로 만들어야 되는지 궁급합니다.
예를 들어 한컴 리눅스, 레드햇 등 여러 Linux 계열에서 다시 컴파일 해야 되는지요?
아시는 분의 자세한 조언 부탁드립니다..

(환경)
소켓관련 일반적인 프로그램인데
아래의 환경에서 컴파일 했습니다.

[view:/home/neo]$ uname -a
Linux Neo 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
[view:/home/neo]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-110)

sjpark의 이미지

가장 간단한 방법은,

작성하신 프로그램이 사용하는 시스템라이브러리를 함께 묶어서, 프로그램 실행될때, 동봉된(?) 라이브러리를 참조하도록 하면 어떨까요.

가능하다면, static(?) 버전으로 만들어서 공유 라이브러리 없이 실행될 수 있게 하는것도 좋은 방법이 될것 같습니다.

neohwang의 이미지

조금 더 자세히 설명해 주시면 안될까요?
static(?) 이 어떤 뜻이지도....

송지석의 이미지

static으로 하면 lgpl 라이센스 문제에 걸려서 소스코드도 같이 배포해야 합니다...

elmia의 이미지

neohwang wrote:
조금 더 자세히 설명해 주시면 안될까요?
static(?) 이 어떤 뜻이지도....

어떻게 배포해야 하는지 저는 잘 모르지만..

static과 dynamic 에 대해 아는대로 조금 적어보겠습니다.

라이브러리 링크에 static link, dynamic link 두 종류가 있는데

static 의 경우 프로그램안에 라이브러리를 포함시켜 버리는겁니다.

컴파일 할때, 라이브러리가 같이 들어가버립니다. 그래서 프로그램 용량도 그만큼 더 커지겠죠.

하지만 dynamic 의 경우는 프로그램안에 라이브러리를 포함시키는 것이 아니라 프로그램이 실행될때, 지정된 라이브러리 경로에서 필요한 라이브러리를 찾아서 쓰는형식입니다. 프로그램 용량도 그만큼 줄어들겠죠.

C로 비유를 하자면, static은 일반 변수이고 dynamic은 힙에 올리는 변수..정도가 되지 않을까요.

배포는 어떻게 해야하는지 전혀 - -;;

Music is the greatest communication in the world.

doogle의 이미지

쉘에서

$ ldd '실행파일전체경로명'

해보시면 실행파일(혹은 라이브러리)이 실제로 사용하는 동적공유라이브러리 목록을 볼 수 있습니다.
바이너리 파일은 목록에서 나오는 라이브러리 버젼과 호환되는 환경에서만 제대로 동작할 겁니다. (대개 마이너 버젼까지 맞으면 제대로 동작하죠..)

만약 프로그램이 필요로하는 DLL이 실제 시스템에 없으면 바로 Seg Fault구요. (ldd해보면 프로그램에 필요한 DLL이 시스템에 있는지 바로 알 수 있습니다.) DLL이 존재하더라도 버젼이 잘 안맞으면 역시 Seg Fault 나게 됩니다.

일반적으로 배포판들이 기본적으로 설치하는 공유라이브러리만 사용한다면
(물론 버젼 호환성 있는) 사실 별 문제는 없을 겁니다.

물론 플랫폼은 동일한 상황이어야 겠죠 ^^;;
(X86이면 X86.. mac이면 mac끼리..)

그리고 뭐 다른 특별한 기능이나 디바이스를 요한다면 이런것도 문제가 될 수도 있습니다.

순수 스태틱 링킹(모든 라이브러리를 스태틱으로 ㅡㅡ;; ) 은 사실 쓰실
쓰실 분이 있을지 ^^;;
부분적인 스태택 링킹을 사용하는 경우는 있습니다.
뭐 따로 사용하는 라이브러리가 잘 안쓰이고 라이센스에 위배되지 않으면
스태틱으로 아예 실행파일에 붙여서 배포할 수도 있겠죠.

소켓프로그램이면 별다른 라이브러리를 가져다 쓰지 않는 이상
기본적인 libc 버젼만 맞는 환경이면 왠만한데는 그냥 돌아갈거 같은데 ^^;;

pynoos의 이미지

각 배포판 별로 따로 컴파일해야합니다.
배포판 패키지가 하는 중요한 일은, Shared Object의 버전관리입니다.

예를 들어 RedHat을 지원하려면, 7.1 정도에서 빌드해서 배포하시고,
빌드된 바이너리가 ldd 등으로 검사해서

rpm -qf

를 사용하여 해당 패키지를 살펴봅니다. 8.0 이나 9 에서는 7.x 용 compat으로 시작하는 호환성 라이브러리가 제공됩니다.

바이너리로 배포할 때는 항상 위와같은 상황을 잘 고려해주셔야합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.