Comments (10)
As a supplement, I am solving this problem #83. I can not get a mupdf static library.
from go-fitz.
All static libraries are cross compiled on Linux. Mingw toolchain for Windows and Osxcross for macOS. For me it is much easier to build everything in Linux, I don't even know how to build something in Windows.
from go-fitz.
I guess you can use WSL and install Mingw there, instead of using the VS.
from go-fitz.
May I ask how to cross-compile mupdf on linux, where files need to be changed?
from go-fitz.
#!/usr/bin/env bash
MINGW_x86_32="/usr/i686-w64-mingw32"
MINGW_x86_64="/usr/x86_64-w64-mingw32"
LINUX_ARM_32="/usr/armv7a-hardfloat-linux-gnueabi"
LINUX_ARM_64="/usr/aarch64-unknown-linux-gnu"
ANDROID_ARM_32="/usr/arm-linux-androideabi"
ANDROID_ARM_64="/usr/aarch64-linux-android"
APPLE_x86_64="/usr/x86_64-apple-darwin"
APPLE_ARM_64="/usr/aarch64-apple-darwin"
OPTS="HAVE_X11=no HAVE_GLFW=no HAVE_GLUT=no WANT_OPENSSL=no WANT_CURL=no HAVE_MUJS=yes HAVE_JSCORE=no HAVE_V8=no"
export CROSS=""
CROSS="" \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}objcopy -w -L hb_* build/release/libmupdf-third.a; ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-x86_64; mv build/release build/linux-x86_64/
cp build/linux-x86_64/release/libmupdf.a build/libmupdf_linux_amd64.a; cp build/linux-x86_64/release/libmupdf-third.a build/libmupdfthird_linux_amd64.a
export CROSS=""
CROSS="" \
CC="${CROSS}gcc -m32" CXX="${CROSS}g++ -m32" \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}objcopy -w -L hb_* build/release/libmupdf-third.a; ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-386; mv build/release build/linux-386/
cp build/linux-386/release/libmupdf.a build/libmupdf_linux_386.a; cp build/linux-386/release/libmupdf-third.a build/libmupdfthird_linux_386.a
export CROSS="x86_64-pc-linux-musl-"
CROSS="x86_64-pc-linux-musl-" \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-x86_64-musl; mv build/release build/linux-x86_64-musl/
cp build/linux-x86_64-musl/release/libmupdf.a build/libmupdf_linux_amd64_musl.a; cp build/linux-x86_64-musl/release/libmupdf-third.a build/libmupdfthird_linux_amd64_musl.a
export CROSS="aarch64-unknown-linux-gnu-"
CROSS="aarch64-unknown-linux-gnu-" \
PKG_CONFIG_LIBDIR=${LINUX_ARM_64}/usr/lib/pkgconfig \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-aarch64; mv build/release build/linux-aarch64/
cp build/linux-aarch64/release/libmupdf.a build/libmupdf_linux_arm64.a; cp build/linux-aarch64/release/libmupdf-third.a build/libmupdfthird_linux_arm64.a
export CROSS="aarch64-pc-linux-musl-"
CROSS="aarch64-pc-linux-musl-" \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-aarch64-musl; mv build/release build/linux-aarch64-musl/
cp build/linux-aarch64-musl/release/libmupdf.a build/libmupdf_linux_arm64_musl.a; cp build/linux-aarch64-musl/release/libmupdf-third.a build/libmupdfthird_linux_arm64_musl.a
export CROSS="armv7a-hardfloat-linux-gnueabi-"
CROSS="armv7a-hardfloat-linux-gnueabi-" \
PKG_CONFIG_LIBDIR=${LINUX_ARM_32}/usr/lib/pkgconfig \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && ${CROSS}ranlib build/release/libmupdf-third.a; mkdir -p build/linux-armv7a; mv build/release build/linux-armv7a/
cp build/linux-armv7a/release/libmupdf.a build/libmupdf_linux_arm.a; cp build/linux-armv7a/release/libmupdf-third.a build/libmupdfthird_linux_arm.a
CROSS="i686-w64-mingw32-" \
PKG_CONFIG_LIBDIR=${MINGW_X86_32}/usr/lib/pkgconfig \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs OS=mingw32-cross
cp build/mingw32-cross/release/libmupdf.a build/libmupdf_windows_386.a; cp build/mingw32-cross/release/libmupdf-third.a build/libmupdfthird_windows_386.a
CROSS="x86_64-w64-mingw32-" \
PKG_CONFIG_LIBDIR=${MINGW_X86_64}/usr/lib/pkgconfig \
CC=${CROSS}gcc CXX=${CROSS}g++ \
LD=${CROSS}ld AR=${CROSS}ar \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs OS=mingw64-cross
cp build/mingw64-cross/release/libmupdf.a build/libmupdf_windows_amd64.a; cp build/mingw64-cross/release/libmupdf-third.a build/libmupdfthird_windows_amd64.a
export PATH=${PATH}:${APPLE_x86_64}/bin
CROSS="x86_64-apple-darwin21.1-" \
PKG_CONFIG_LIBDIR=${APPLE_x86_64}/usr/lib/pkgconfig \
CC=${CROSS}clang CXX=${CROSS}clang++ \
LD=${CROSS}ld AR=${CROSS}ar \
RANLIB=${CROSS}ranlib \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs OS=MACOS && mkdir -p build/darwin-x86_64; mv build/release build/darwin-x86_64/
cp build/darwin-x86_64/release/libmupdf.a build/libmupdf_darwin_amd64.a; cp build/darwin-x86_64/release/libmupdf-third.a build/libmupdfthird_darwin_amd64.a
export PATH=${PATH}:${APPLE_ARM_64}/bin
CROSS="aarch64-apple-darwin21.1-" \
PKG_CONFIG_LIBDIR=${APPLE_ARM_64}/usr/lib/pkgconfig \
CC=${CROSS}clang CXX=${CROSS}clang++ \
LD=${CROSS}ld AR=${CROSS}ar \
RANLIB=${CROSS}ranlib \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs OS=MACOS && mkdir -p build/darwin-ARM_64; mv build/release build/darwin-ARM_64/
cp build/darwin-ARM_64/release/libmupdf.a build/libmupdf_darwin_arm64.a; cp build/darwin-ARM_64/release/libmupdf-third.a build/libmupdfthird_darwin_arm64.a
export PATH=${PATH}:${ANDROID_ARM_32}/bin
CROSS="armv7a-linux-androideabi21-" \
PKG_CONFIG_LIBDIR=${ANDROID_ARM_32}/usr/lib/pkgconfig \
CC=${CROSS}clang CXX=${CROSS}clang++ \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && mkdir -p build/android-armv7a; mv build/release build/android-armv7a/
cp build/android-armv7a/release/libmupdf.a build/libmupdf_android_arm.a; cp build/android-armv7a/release/libmupdf-third.a build/libmupdfthird_android_arm.a
export PATH=${PATH}:${ANDROID_ARM_64}/bin
CROSS="aarch64-linux-android21-" \
PKG_CONFIG_LIBDIR=${ANDROID_ARM_64}/usr/lib/pkgconfig \
CC=${CROSS}clang CXX=${CROSS}clang++ \
CROSSCOMPILE=yes `eval "${OPTS}"` make -j$(nproc) libs HAVE_OBJCOPY=no && mkdir -p build/android-aarch64; mv build/release build/android-aarch64/
cp build/android-aarch64/release/libmupdf.a build/libmupdf_android_arm64.a; cp build/android-aarch64/release/libmupdf-third.a build/libmupdfthird_android_arm64.a
This is the bash script I am using to build everything, hope it can help you.
from go-fitz.
Of course, I have a patch that disables CJK fonts, static library is by default 50M, and without CJK fonts is 5M.
from go-fitz.
Thank you very much.
I'll try this script.
And How can this patch be used?
from go-fitz.
If your goal is to build with CJK fonts, you don't need the patch, it just modifies Makefile/Makerules and some define in the header file. The default build should work for you.
from go-fitz.
I'm sorry I didn't understand what you mean, I'm directly referencing the latest go-fitz in go.mod now, but I still have CJK problems. Do you mean that the go-fitz default version can solve this problem, or do you mean that I just need to compile the default build of the mupdf static library.
from go-fitz.
It is not related to go-fitz. For CJK, all you need is extlib
tag. That will use external library, whether it is dynamic/shared or static library is up to user. If you don't want a requirement that your users need to install mupdf, static library is a must.
from go-fitz.
Related Issues (20)
- getting crash for some pdf format HOT 1
- start program HOT 2
- undefined: fitz.New HOT 3
- fitz is not importing correctly HOT 2
- centos alpine build faild HOT 5
- Linux platform, when PDF is invalid
- Error when convert PDF to Image HOT 3
- Out of Memory issues with frequent requests HOT 6
- build for linux HOT 2
- Creating new PDF file with loaded pages HOT 1
- Vendoring the include files HOT 2
- cannot find builtin CJK font HOT 1
- doc.HTML() can it support <table> <tr> <td>? HOT 1
- linux compilation error HOT 3
- linux ubuntu build fail HOT 5
- Makes discord/lilliput segfault HOT 2
- fitz is empty HOT 2
- How to build docker with this package?
- GCC 12.2 Support HOT 10
- Is it possible to add PDF splitting and merging functions? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-fitz.