Public bug reported:

1) Summary:

ZSTD static library (libzstd.a) provided in 1.5.5+dfsg2-2build1.1 is not
position-independent. So, linking this library to a shared library
fails.

2) Package Info:

$ apt-cache policy libzstd-dev
libzstd-dev:
  Installed: 1.5.5+dfsg2-2build1.1
  Candidate: 1.5.5+dfsg2-2build1.1
  Version table:
 *** 1.5.5+dfsg2-2build1.1 500
        500 http://linux-ftp.jf.intel.com/pub/mirrors/ubuntu noble-updates/main 
amd64 Packages
        500 http://linux-ftp.fi.intel.com/pub/mirrors/ubuntu noble-updates/main 
amd64 Packages
        100 /var/lib/dpkg/status
     1.5.5+dfsg2-2build1 500
        500 http://linux-ftp.jf.intel.com/pub/mirrors/ubuntu noble/main amd64 
Packages
        500 http://linux-ftp.fi.intel.com/pub/mirrors/ubuntu noble/main amd64 
Packages

3) Operating System Info:

$ lsb_release -rd
No LSB modules are available.
Description:    Ubuntu 24.04 LTS
Release:        24.04

4) What you expected to happen:
static library should be built with "-fPIC" flag. Conan, for example, 
distribute zstd with `-fPIC` flag 
(https://github.com/conan-io/conan-center-index/blob/master/recipes/zstd/all/conanfile.py#L27).

5) What happened instead:

Consider the following reproducer:
-------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zstd.h>

int main(int argc, const char** argv)
{
    char stringToCompress[] = "String to be compressed";
    int len = strlen(stringToCompress);
    int bound = ZSTD_compressBound(len);
    char* dstBuff = (char*)malloc(bound);

    int compressedSize = ZSTD_compress(dstBuff, bound, stringToCompress,
len, 1);

    printf("Size of original buffer: %d\n", len);
    printf("Size of compressed buffer: %d\n", compressedSize);

    free(dstBuff);
    return 0;
}
--------------------------------
Try compiling this as a shared library by linking static zstd:

$ clang -fPIC -shared <reproducer> /usr/lib/x86_64-linux-gnu/libzstd.a

/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzstd.a(zstd_compress.o): warning: 
relocation against `ZSTD_copySequencesToSeqStoreNoBlockDelim' in read-only 
section `.text'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libzstd.a(zstd_compress.o): relocation 
R_X86_64_PC32 against symbol `ZSTD_copySequencesToSeqStoreExplicitBlockDelim' 
can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
clang: error: linker command failed with exit code 1 (use -v to see invocation)

** Affects: libzstd (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2086543

Title:
  libzstd.a not built with -fPIC flag

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libzstd/+bug/2086543/+subscriptions


-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to