Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Not actually static? #38

Open
djcp opened this issue Sep 24, 2015 · 12 comments
Open

Not actually static? #38

djcp opened this issue Sep 24, 2015 · 12 comments

Comments

@djcp
Copy link

djcp commented Sep 24, 2015

When I run this on a debian jessie machine, and run ldd bin/ffmpeg, it doesn't look like this is actually generating a statically compiled binary. Tons of libraries are getting dynamically linked in.

If it were a totally static binary, ldd would return not a dynamic executable.

I was hoping this project would result in a completely portable 64-bit binary but it doesn't appear to. Have I got this wrong? Thanks in advance.

@mshade
Copy link

mshade commented Oct 21, 2015

I'm seeing the same. The README seems to note a few "remaining" libraries on OS X (and ldd shows no dynamic libraries on ubuntu), but when run on Arch, the resulting binary is dynamically linked to more than 30 system libraries.

@crayxt
Copy link

crayxt commented Nov 17, 2015

same here on Centos 7

@crayxt
Copy link

crayxt commented Nov 17, 2015

It seems like both arch and centos do not ship *.a object files in -devel packages (or main packages in Arch), checked on libass package.

@rodrigopolo
Copy link

Does anyone here know how or where I can find a trustworthy guide to compile a truly 100% static version of FFmpeg on Ubuntu x64?

Here are the dependencies I got using this script:

$ ldd ffmpeg
        linux-vdso.so.1 =>  (0x00007ffc368dd000)
        libva.so.1 => /usr/lib/x86_64-linux-gnu/libva.so.1 (0x00007f7c793f5000)
        libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f7c791d3000)
        libxcb-shm.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shm.so.0 (0x00007f7c78fce000)
        libxcb-xfixes.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-xfixes.so.0 (0x00007f7c78dc6000)
        libxcb-shape.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-shape.so.0 (0x00007f7c78bc2000)
        libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f7c78887000)
        libasound.so.2 => /usr/lib/x86_64-linux-gnu/libasound.so.2 (0x00007f7c78587000)
        libSDL-1.2.so.0 => /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 (0x00007f7c782ee000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7c780d0000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7c77dc7000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7c77a45000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7c7783c000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7c77638000)
        libvorbisenc.so.2 => /usr/lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f7c7738f000)
        libvorbis.so.0 => /usr/lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f7c77162000)
        libtheoraenc.so.1 => /usr/lib/x86_64-linux-gnu/libtheoraenc.so.1 (0x00007f7c76f23000)
        libtheoradec.so.1 => /usr/lib/x86_64-linux-gnu/libtheoradec.so.1 (0x00007f7c76d09000)
        libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f7c76a5e000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f7c76844000)
        libass.so.5 => /usr/lib/x86_64-linux-gnu/libass.so.5 (0x00007f7c76614000)
        libvdpau.so.1 => /usr/lib/x86_64-linux-gnu/libvdpau.so.1 (0x00007f7c7640f000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7c76046000)
        libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f7c75e42000)
        libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f7c75c3b000)
        /lib64/ld-linux-x86-64.so.2 (0x0000557a64792000)
        libpulse-simple.so.0 => /usr/lib/x86_64-linux-gnu/libpulse-simple.so.0 (0x00007f7c75a36000)
        libpulse.so.0 => /usr/lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f7c757e6000)
        libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f7c755d4000)
        libcaca.so.0 => /usr/lib/x86_64-linux-gnu/libcaca.so.0 (0x00007f7c7530b000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7c750f4000)
        libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007f7c74eeb000)
        libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f7c74cc5000)
        libfribidi.so.0 => /usr/lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007f7c74aae000)
        libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f7c7486b000)
        libharfbuzz.so.0 => /usr/lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f7c7460c000)
        libpulsecommon-8.0.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-8.0.so (0x00007f7c74392                                                000)
        libjson-c.so.2 => /lib/x86_64-linux-gnu/libjson-c.so.2 (0x00007f7c74186000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f7c73f3a000)
        libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007f7c73bae000)
        libncursesw.so.5 => /lib/x86_64-linux-gnu/libncursesw.so.5 (0x00007f7c7397e000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7c73755000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f7c7352c000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f7c7321a000)
        libgraphite2.so.3 => /usr/lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f7c72ff5000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f7c72f70000)
        libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f7c72d65000)
        libsndfile.so.1 => /usr/lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f7c72afc000)
        libasyncns.so.0 => /usr/lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f7c728f6000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f7c72685000)
        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f7c72463000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f7c72240000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f7c71f5f000)
        libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f7c71d46000)
        libFLAC.so.8 => /usr/lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f7c71ad0000)
        libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f7c718b5000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f7c716a0000)

@schwittlick
Copy link

Same here, why is the binary still dynamically linked though its explicitely called static? Without any warnings even..

@zimbatm
Copy link
Owner

zimbatm commented Aug 10, 2016

When I initially started this project the list of non-static dependencies was fairly small. Because it's using the glibc there are always going to be a couple of non-static things (like pthread and GL libs) but this has grown out of hand.

I don't have the time to maintain this project. If anyone wants to step-up I'm happy to give access to the repo or even transfer it.

@andreipoe
Copy link
Contributor

I have looked into this issue a little. You can get a fully static build of ffmpeg without the --enable-libass flag using the changes below:

$ git diff
diff --git a/build.sh b/build.sh
index a2595ed..6d04cc2 100755
--- a/build.sh
+++ b/build.sh
@@ -171,13 +171,12 @@ cd $BUILD_DIR/FFmpeg*
 PKG_CONFIG_PATH="$TARGET_DIR/lib/pkgconfig" ./configure \
   --prefix="$TARGET_DIR" \
   --pkg-config-flags="--static" \
-  --extra-cflags="-I$TARGET_DIR/include" \
-  --extra-ldflags="-L$TARGET_DIR/lib" \
+  --extra-cflags="-I$TARGET_DIR/include -static" \
+  --extra-ldflags="-L$TARGET_DIR/lib -static" \
   --bindir="$BIN_DIR" \
   --enable-ffplay \
   --enable-ffserver \
   --enable-gpl \
-  --enable-libass \
   --enable-libfdk-aac \
   --enable-libfreetype \
   --enable-libmp3lame \
$ ldd bin/ffmpeg 
	not a dynamic executable

Whether this is good enough, I don't know. However, it looks like a fully static build with libass will be harder to achieve. We can compile a static version of libass from source, but static versions of libgraphite2 and libfribidi are not available in Debian, and this Debian mailing list thread seems to indicate there are no plans to add them any time soon. What's more, libgraphite2 doesn't even seem to have a way to produce a static build out-of-the-box.

If anyone has any ideas, I could look into them, but otherwise I will set this aside for now.

@zimbatm
Copy link
Owner

zimbatm commented Mar 24, 2017

👍 for removing features if they can't be statically compiled. That's the main goal of this project after all.

@ghost
Copy link

ghost commented Apr 10, 2017

if you're still interested in transferring this project, I could take over. I need a static ffmpeg for a couple of platforms.

@zimbatm
Copy link
Owner

zimbatm commented Apr 10, 2017

there are already a couple of people helping out sporadically. If you submit a useful PR I don't mind adding you as a collaborator as well.

@Zalewa
Copy link
Collaborator

Zalewa commented Apr 27, 2017

PR #61 should fix this.

@Zalewa
Copy link
Collaborator

Zalewa commented Jun 20, 2018

Broken again by PR #74, fix in PR #79.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants