[Bug 2086543] [NEW] libzstd.a not built with -fPIC flag
Udit Agarwal
2086543 at bugs.launchpad.net
Sat Nov 2 22:44:39 UTC 2024
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
Foundations Bugs, which is subscribed to libzstd in Ubuntu.
https://bugs.launchpad.net/bugs/2086543
Title:
libzstd.a not built with -fPIC flag
Status in libzstd package in Ubuntu:
New
Bug description:
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)
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libzstd/+bug/2086543/+subscriptions
More information about the foundations-bugs
mailing list