Скомпилировать статическую версию pngquant

Я пытаюсь создать статически связанную версию pngquant в Oracle Linux Server выпуск 7.1. Я скомпилировал статическую версию zlib и статическую версию libpng.

Затем, когда я настраиваю pngquant, я всегда получаю информацию о том, что он будет связан с общей версией zlib.

$./configure --with-libpng =.. / libpng-1.6.21 --extra-cflags = "- I../ zlib-1.2.8" --extra-ldflags = "../ zlib-1.2. 8 / libz.a"

  Компилятор: GCC
     Отладка: нет
       SSE: да
    OpenMP: нет
    libpng: статический (1.6.21)
      zlib: общая (1.2.7)
     lcms2: нет

Если я выполняю make, в выводе кажется, что параметры правильно передаются компилятору. Однако полученный двоичный файл требует выполнения libz.so. Кажется, что мои директивы игнорируются или что установленная версия всегда имеет приоритет.

Есть ли способ заставить pngquant быть скомпилированным со статической версией zlib?

2 ответа

Я не уверен, правильно ли я понял, но вот патч для настройки pngquant, который мне помог. configure сейчас принимает --with-zlib=<dir> в качестве параметра. Сохраните это pngquant.patch и применить его с patch -uN -p1 -i pngquant.patch,

    diff -ur pngquant-2.9.0/configure pngquant-2.9.0.fixed/configure
--- pngquant-2.9.0/configure    2017-03-06 09:37:30.000000000 +0100
+++ pngquant-2.9.0.fixed/configure  2017-03-07 09:57:20.246012152 +0100
@@ -48,6 +48,7 @@
         help "--with-cocoa/--without-cocoa  use Cocoa framework to read images"
 fi
         help "--with-libpng=<dir>           search for libpng in directory"
+        help "--with-zlib=<dir>             search for zlib in directory"
         echo
         help "CC=<compiler>                 use given compiler command"
         help "CFLAGS=<flags>                pass options to the compiler"
@@ -97,6 +98,9 @@
     --with-libpng=*)
         LIBPNG_DIR=${i#*=}
         ;;
+    --with-zlib=*)
+        ZLIB_DIR=${i#*=}
+        ;;
     --prefix=*)
         PREFIX=${i#*=}
         ;;
@@ -238,6 +242,19 @@
     echo "${MAJ}${MIN}"
 }

+# returns full zlib.h version string
+zlibh_string() {
+    echo "$(grep -m1 "define ZLIB_VERSION" "$1" | \
+            grep -Eo '"[^"]+"' | grep -Eo '[^"]+')"
+}
+
+# returns major minor version numbers from png.h
+zlibh_majmin() {
+    local MAJ=$(grep -m1 "define ZLIB_VER_MAJOR" "$1" | grep -Eo "[0-9]+")
+    local MIN=$(grep -m1 "define ZLIB_VER_MINOR" "$1" | grep -Eo "[0-9]+")
+    echo "${MAJ}${MIN}"
+}
+
 error() {
     status "$1" "error ... $2"
     echo
@@ -420,11 +437,42 @@
     error "libpng" "not found (try: $LIBPNG_CMD)"
 fi

-# zlib
-if ! find_library "zlib" "z" "zlib.h" "libz.a" "libz.$SOLIBSUFFIX*"; then
-    error "zlib" "not found (please install zlib-devel package)"
+# try if given flags are enough for zlib
+HAS_ZLIB=0
+if echo "#include \"zlib.h\"
+    int main(){
+    uLong test = zlibCompileFlags();
+    return 0;
+}" | "$CC" -xc -std=c99 -o /dev/null $CFLAGS $LDFLAGS - &> /dev/null; then
+    status "zlib" "custom flags"
+    HAS_ZLIB=1
 fi

+if [ "$HAS_ZLIB" -eq 0 ]; then
+    # try static in the given directory
+    ZLIBH=$(find_h "$ZLIB_DIR" "zlib.h")
+    if [ -n "$ZLIBH" ]; then
+        ZLIBH_STRING=$(zlibh_string "$ZLIBH")
+        ZLIBH_MAJMIN=$(zlibh_majmin "$ZLIBH")
+        if [[ -n "$ZLIBH_STRING" && -n "$ZLIBH_MAJMIN" ]]; then
+            ZLIBA=$(find_f "$ZLIB_DIR" "libz${ZLIBH_MAJMIN}.a")
+            if [ -z "$ZLIBA" ]; then
+                ZLIBA=$(find_f "$ZLIB_DIR" "libz.a")
+            fi
+            if [ -n "$ZLIBA" ]; then
+                cflags "-I${ZLIBH%/*}"
+                lflags "${ZLIBA}"
+                status "zlib" "static (${ZLIBH_STRING})"
+                HAS_ZLIB=1
+            fi
+        fi
+    fi
+fi
+# zlib
+#if ! find_library "zlib" "z" "zlib.h" "zlib.a" "zlib.$SOLIBSUFFIX*"; then
+#    error "zlib" "not found (please install zlib-devel package)"
+#fi
+
 # lcms2
 if [ "$LCMS2" != 0 ]; then
     if find_library "lcms2" "lcms2" "lcms2.h" "liblcms2.a" "liblcms2.$SOLIBSUFFIX*"; then

Извините, скрипт конфигурации не поддерживает его. Не должно быть слишком сложно изменить configure для передачи соответствующих флагов pkg-config или сделать тот же обходной путь, что и для libpng.

Другие вопросы по тегам