2016-09-26 8 views
1

정적으로 링크 된 버전의 vip을 만들려고했지만 시도 할 수 없었습니다. 정적으로 링크 된 vips 명령을 만들 수 있습니까?정적 링크 된 vips (libvips) 바이너리

내가 컴파일 할 플랫폼은 우분투 16.04입니다.

make 명령 내가 실행하고 있습니다 :

make LDFLAGS=-all-static 

내가 파이썬이나 ImageMagick과, (는 config 출력에서 ​​그 쇼를 "아니오")을 사용하도록 설정하고 있지 않다. 나는 점점 오전 오류 : 내가 여기 예를 들어,에서 발견 한 것과

/usr/bin/ld: cannot find -lgdk_pixbuf-2.0 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `lookup_gid_name': 
(.text+0x11d7): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libgio-2.0.a(libgio_2_0_la-glocalvfs.o): In function `g_local_vfs_parse_name': 
(.text+0x1cd): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function `g_get_user_database_entry': 
(.text+0x249): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libglib-2.0.a(libglib_2_0_la-gutils.o): In function `g_get_user_database_entry': 
(.text+0xcf): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `lookup_uid_data': 
(.text+0x1054): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libxml2.a(nanohttp.o): In function `xmlNanoHTTPConnectHost': 
(.text+0x924): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libxml2.a(nanohttp.o): In function `xmlNanoHTTPConnectHost': 
(.text+0x9f4): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libgio-2.0.a(libgio_2_0_la-gnetworkaddress.o): In function `g_network_address_parse': 
(.text+0xc39): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libgio-2.0.a(libgio_2_0_la-gnetworkaddress.o): In function `g_network_address_parse': 
(.text+0xc4e): warning: Using 'endservent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking 
collect2: error: ld returned 1 exit status 
Makefile:597: recipe for target 'vips' failed 
make[2]: *** [vips] Error 1 
make[2]: Leaving directory '/usr/local/src/vips-8.4.1/tools' 
Makefile:631: recipe for target 'all-recursive' failed 
make[1]: *** [all-recursive] Error 1 
make[1]: Leaving directory '/usr/local/src/vips-8.4.1' 
Makefile:536: recipe for target 'all' failed 
make: *** [all] Error 2 

: Create statically-linked binary that uses getaddrinfo? 이이 libnss에 문제가 있다는 것이다. 그러나 ./configure --help 출력에는 --enable-static-flag가 없습니다. 그렇다고하더라도 나는 그것을 시도하고 그것은 내 문제를 해결하지 않았다.

나는에 연결하고 라이브러리 (는 config 출력에 따라, 나는 그것을 절단 한) :

build radiance support:   yes 
build analyze support:   yes 
build PPM support:   yes 
use fftw3 for FFT:   yes 
accelerate loops with orc:  yes 
ICC profile support with lcms:  yes (lcms2) 
SVG import with librsvg-2.0:  yes 
zlib:     yes 
file import/export with libwebp: yes 
file import/export with libpng:  yes (pkg-config libpng >= 1.2.9) 
file import/export with libtiff: yes (pkg-config libtiff-4) 
file import/export with giflib:  yes (found by search) 
file import/export with libjpeg: yes 
use libexif to load/save JPEG metadata: yes 

내가 문제를 일으키는 것을에 연결하고 특정 라이브러리가 있습니까?

$ CFLAGS="-static" CXXFLAGS="-static" ./configure --prefix=/home/john/vips --without-python --without-magick 

을 그리고 작동하는 것 같다 :

답변

1

나는이 같은 시도 나는 많은 생각을 테스트하지했습니다

$ ls ~/vips/lib 
girepository-1.0 libvipsCC.a libvips-cpp.a libvips.la python2.7 
libvips.a   libvipsCC.la libvips-cpp.la pkgconfig 
$ which vips 
/home/john/vips/bin/vips 
$ ls -l ~/vips/bin/vips 
-rwxr-xr-x 1 john john 6373864 Sep 27 13:16 /home/john/vips/bin/vips 
$ vips invert /data/john/pics/k2.jpg x.jpg 
$ eog x.jpg 

, 나는 매우 정적 아니다 생각한다. 예를 들어 vips 바이너리에서 ldd를 실행하면 긴 목록이 표시됩니다. 진정한 정적 바이너리는 더 이상 존재하지 않습니다.

왜 정적 바이너리를 원하십니까? 배급을 쉽게하려면 플랫 팟 (flatpack)과 딱딱한 물건 (snappy) 같은 것이 더 좋을 수 있습니다. 또한 sort-of를 직접 만들 수도 있습니다. 예를 들어, vip은 공유 된 바이너리를 재배치 가능하게 만드는 간단한 래퍼 스크립트와 함께 제공됩니다.

+0

정적 버전의 ffmpeg 및 ffprobe가있는 최소형 도커 컨테이너에 배포하고 싶습니다. 나는 이미지 변환 프로그램이 getservbyname과 같은 호출을 필요로하는 이유를 확신하지 못했기 때문에 내가 떨어 뜨릴 수있는 의존성이 있기를 바랬다. – SjB

+0

vips는 이식성을 돕기 위해 glib를 사용하고 glib는 많은 것들을 포함하고 있습니다. 제거 된 것들을 가지고 자신 만의 글립을 만들 수도 있습니다. 정적 바이너리 ^^^^는 16.04 설치에서 작동 할 것이라고 생각합니다. 그러나 이것은 최소한의 리눅스 설치에서는 작동하지 않을 것입니다. OpenWRT는 libvips 패키지를 가지고 있으며 매우 작습니다. 아마도이를 적용 할 수 있을까요? – user894763

+0

dietlibc와 같은 것을 사용하는 것이 효과가 있을지 모르지만 아직 다시 방문 할 기회가 없었습니다. – SjB