Всех приветствую!
Знает ли кто-нибудь решение такой проблемы:
собираю библиотеку (lib)xlsxio,но для нее нужна minizip-ng:
действую
cmake -S . -B build -D MZ_BUILD_TESTS=ON
~/minizip-ng$ cmake -S . -B build -D MZ_BUILD_TESTS=ON
-- Using CMake version 3.16.3
-- Using ZLIB 1.3.1
-- BZip2 library not found
-- Checking for module 'liblzma'
-- No package 'liblzma' found
-- Using LZMA 5.2.4
-- Checking for module 'libzstd'
-- No package 'libzstd' found
-- ZSTD library not found
-- Using OpenSSL 3.2.2
-- Using Iconv
-- The following features have been enabled:
* MZ_COMPAT, Enables compatibility layer
* MZ_ZLIB, Enables ZLIB compression
* MZ_LZMA, Enables LZMA & XZ compression
* MZ_PKCRYPT, Enables PKWARE traditional encryption
* MZ_WZAES, Enables WinZIP AES encryption
* MZ_OPENSSL, Enables OpenSSL for encryption
* MZ_LIBBSD, Builds with libbsd crypto random
* MZ_ICONV, Enables iconv string encoding conversion library
* MZ_BUILD_TESTS, Builds minizip test executable
-- The following features have been disabled:
* MZ_BZIP2, Enables BZIP2 compression
* MZ_ZSTD, Enables ZSTD compression
* MZ_LIBCOMP, Enables Apple compression
* MZ_FETCH_LIBS, Enables fetching third-party libraries if not found
* MZ_FORCE_FETCH_LIBS, Enables fetching third-party libraries always
* MZ_COMPRESS_ONLY, Only support compression
* MZ_DECOMPRESS_ONLY, Only support decompression
* MZ_FILE32_API, Builds using posix 32-bit file api
* MZ_BUILD_UNIT_TESTS, Builds minizip unit test project
* MZ_BUILD_FUZZ_TESTS, Builds minizip fuzzer executables
* MZ_CODE_COVERAGE, Builds with code coverage flags
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bark/minizip-ng/build
Потом
cmake –build build
~/minizip-ng$ cmake --build build
make[1]: Entering directory '/home/bark/minizip-ng/build'
make[2]: Entering directory '/home/bark/minizip-ng/build'
make[2]: Leaving directory '/home/bark/minizip-ng/build'
make[2]: Entering directory '/home/bark/minizip-ng/build'
[ 4%] Building C object CMakeFiles/minizip.dir/mz_crypt.c.o
[ 8%] Building C object CMakeFiles/minizip.dir/mz_os.c.o
[ 13%] Building C object CMakeFiles/minizip.dir/mz_strm.c.o
[ 17%] Building C object CMakeFiles/minizip.dir/mz_strm_buf.c.o
[ 21%] Building C object CMakeFiles/minizip.dir/mz_strm_mem.c.o
[ 26%] Building C object CMakeFiles/minizip.dir/mz_strm_split.c.o
[ 30%] Building C object CMakeFiles/minizip.dir/mz_zip.c.o
[ 34%] Building C object CMakeFiles/minizip.dir/mz_zip_rw.c.o
[ 39%] Building C object CMakeFiles/minizip.dir/mz_strm_zlib.c.o
[ 43%] Building C object CMakeFiles/minizip.dir/mz_strm_lzma.c.o
[ 47%] Building C object CMakeFiles/minizip.dir/mz_crypt_openssl.c.o
[ 52%] Building C object CMakeFiles/minizip.dir/mz_os_posix.c.o
[ 56%] Building C object CMakeFiles/minizip.dir/mz_strm_os_posix.c.o
[ 60%] Building C object CMakeFiles/minizip.dir/mz_strm_pkcrypt.c.o
[ 65%] Building C object CMakeFiles/minizip.dir/mz_strm_wzaes.c.o
[ 69%] Building C object CMakeFiles/minizip.dir/compat/ioapi.c.o
[ 73%] Building C object CMakeFiles/minizip.dir/compat/unzip.c.o
[ 78%] Building C object CMakeFiles/minizip.dir/compat/zip.c.o
[ 82%] Linking C static library libminizip.a
make[2]: Leaving directory '/home/bark/minizip-ng/build'
[ 82%] Built target minizip
make[2]: Entering directory '/home/bark/minizip-ng/build'
make[2]: Leaving directory '/home/bark/minizip-ng/build'
make[2]: Entering directory '/home/bark/minizip-ng/build'
[ 86%] Building C object CMakeFiles/minizip_cli.dir/minizip.c.o
[ 91%] Linking C executable minizip
make[2]: Leaving directory '/home/bark/minizip-ng/build'
[ 91%] Built target minizip_cli
make[2]: Entering directory '/home/bark/minizip-ng/build'
make[2]: Leaving directory '/home/bark/minizip-ng/build'
make[2]: Entering directory '/home/bark/minizip-ng/build'
[ 95%] Building C object CMakeFiles/minigzip_cli.dir/minigzip.c.o
[100%] Linking C executable minigzip
make[2]: Leaving directory '/home/bark/minizip-ng/build'
[100%] Built target minigzip_cli
make[1]: Leaving directory '/home/bark/minizip-ng/build'
Потом устанавливаю в usr/local sudo make install
Теперь собираю xlsxio:
~/xlsxio$ cmake -G"Unix Makefiles"
CMake Warning:
No source or binary directory provided. Both will be assumed to be the
same as the current working directory, but note that this warning will
become a fatal error in future CMake releases.
-- XLSX I/O library version: 0.2.35
-- Configuring done
-- Generating done
-- Build files have been written to: /home/bark/xlsxio
bark@zuzu:~/xlsxio$ make
make[1]: Entering directory '/home/bark/xlsxio'
make[2]: Entering directory '/home/bark/xlsxio'
make[2]: Leaving directory '/home/bark/xlsxio'
make[2]: Entering directory '/home/bark/xlsxio'
[ 4%] Building C object CMakeFiles/xlsxio_read_SHARED.dir/lib/xlsxio_read.c.o
[ 8%] Building C object CMakeFiles/xlsxio_read_SHARED.dir/lib/xlsxio_read_sharedstrings.c.o
[ 13%] Linking C shared library libxlsxio_read.so
/usr/bin/ld: /usr/local/lib/libminizip.a(mz_strm.c.o): relocation R_X86_64_PC32 against symbol `mz_stream_write' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/xlsxio_read_SHARED.dir/build.make:102: libxlsxio_read.so] Error 1
make[2]: Leaving directory '/home/bark/xlsxio'
make[1]: *** [CMakeFiles/Makefile2:150: CMakeFiles/xlsxio_read_SHARED.dir/all] Error 2
make[1]: Leaving directory '/home/bark/xlsxio'
make: *** [Makefile:130: all] Error 2
Проблема тут
relocation R_X86_64_PC32 against symbol `mz_stream_write’ can not be used when making a shared object; recompile with -fPIC
Тогда ставлю в minizip-ng/CMakeLists.txt
на СЛЕДУЮЩЕЙ строке после комментария
# Set compiler options
строчку SET(CMAKE_SHARED_LIBRARY_C_FLAGS «-fpic»)
Потом, пересобираю, устанавливаю minixip-ng
Возвращаюсь к xlsxio:
результат такой же, тот же выхлоп в консоль, опять не может прилинковать
[ 13%] Linking C shared library libxlsxio_read.so
Linking C shared library libxlsxio_read.so
/usr/bin/ld: /usr/local/lib/libminizip.a(mz_strm.c.o): relocation R_X86_64_PC32 against symbol `mz_stream_write' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
Пока не ясно в чем проблема.
Странно, что разработчики в соих инструкциях по сборке никак момент с -fPIC не упомянули.
Видимо это считается тривиальным моментом..