LINUX.ORG.RU

Проблема с запуском приложения

 , ,


0

1

Опакетил FBReader 2.0, но... Если установить ее без учета зависимостей, как есть, то получим:

/opt/fbreader/FBReader 
/opt/fbreader/FBReader: error while loading shared libraries: libicuuc.so.72: cannot open shared object file: No such file or directory

ldd /opt/fbreader/FBReader 
	linux-vdso.so.1 (0x00007fff85d9f000)
	libzip.so.5 => /usr/lib64/libzip.so.5 (0x00007f9813701000)
	libicuuc.so.72 => not found
	libicui18n.so.72 => not found
	libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f9812e7f000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f98136e7000)
	libQt6Core5Compat.so.6 => /usr/lib64/libQt6Core5Compat.so.6 (0x00007f9812e1f000)
	libQt6Widgets.so.6 => /usr/lib64/libQt6Widgets.so.6 (0x00007f9812600000)
	libQt6Network.so.6 => /usr/lib64/libQt6Network.so.6 (0x00007f981244e000)
	libQt6Core.so.6 => /usr/lib64/libQt6Core.so.6 (0x00007f9811e00000)
	libQt6Gui.so.6 => /usr/lib64/libQt6Gui.so.6 (0x00007f9811600000)
	libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6 (0x00007f9811200000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f9811523000)
	libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libgcc_s.so.1 (0x00007f9812dfa000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f9811023000)
	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f98136cf000)
	libcrypto.so.3 => /usr/lib64/libcrypto.so.3 (0x00007f9810a00000)
	libicui18n.so.73 => /usr/lib64/libicui18n.so.73 (0x00007f9810600000)
	libicuuc.so.73 => /usr/lib64/libicuuc.so.73 (0x00007f9810200000)
	libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f98104b9000)
	libdouble-conversion.so.3 => /usr/lib64/libdouble-conversion.so.3 (0x00007f9812de4000)
	libb2.so.1 => /usr/lib64/libb2.so.1 (0x00007f9812dda000)
	libpcre2-16.so.0 => /usr/lib64/libpcre2-16.so.0 (0x00007f9811493000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f981373f000)
	libEGL.so.1 => /usr/lib64/libEGL.so.1 (0x00007f9812dc4000)
	libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f9812d77000)
	libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f98100bb000)
	libQt6DBus.so.6 => /usr/lib64/libQt6DBus.so.6 (0x00007f9810f5a000)
	libxkbcommon.so.0 => /usr/lib64/libxkbcommon.so.0 (0x00007f9812406000)
	libGLX.so.0 => /usr/lib64/libGLX.so.0 (0x00007f9811dcc000)
	libOpenGL.so.0 => /usr/lib64/libOpenGL.so.0 (0x00007f9811da1000)
	libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f9810f22000)
	libharfbuzz.so.0 => /usr/lib64/libharfbuzz.so.0 (0x00007f980ff8c000)
	libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f980fec0000)
	libicudata.so.73 => /usr/lib64/libicudata.so.73 (0x00007f980e000000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f9810962000)
	libgomp.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libgomp.so.1 (0x00007f981046c000)
	libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0 (0x00007f980df47000)
	libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f9811467000)
	libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f9810ef7000)
	libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x00007f981041e000)
	libgraphite2.so.3 => /usr/lib64/libgraphite2.so.3 (0x00007f9811d7b000)
	libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f9812d6c000)
	libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f98123fe000)

Если поставить еще и уже собранный пакет с icu-72, то будет:

/opt/fbreader/FBReader 
/opt/fbreader/FBReader: symbol lookup error: /opt/fbreader/FBReader: undefined symbol: _ZTIN6icu_728ByteSinkE

При этом

ldd /opt/fbreader/FBReader 
	linux-vdso.so.1 (0x00007ffd7cbb4000)
	libzip.so.5 => /usr/lib64/libzip.so.5 (0x00007f1a0978b000)
	libicuuc.so.72 => /opt/icu-bin/lib64/libicuuc.so.72 (0x00007f1a08c00000)
	libicui18n.so.72 => /opt/icu-bin/lib64/libicui18n.so.72 (0x00007f1a08800000)
	libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f1a08e7f000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f1a09771000)
	libQt6Core5Compat.so.6 => /usr/lib64/libQt6Core5Compat.so.6 (0x00007f1a09711000)
	libQt6Widgets.so.6 => /usr/lib64/libQt6Widgets.so.6 (0x00007f1a08000000)
	libQt6Network.so.6 => /usr/lib64/libQt6Network.so.6 (0x00007f1a07e4e000)
	libQt6Core.so.6 => /usr/lib64/libQt6Core.so.6 (0x00007f1a07800000)
	libQt6Gui.so.6 => /usr/lib64/libQt6Gui.so.6 (0x00007f1a07000000)
	libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libstdc++.so.6 (0x00007f1a06c00000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f1a06f23000)
	libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libgcc_s.so.1 (0x00007f1a096e8000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f1a06a23000)
	libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f1a096d4000)
	libcrypto.so.3 => /usr/lib64/libcrypto.so.3 (0x00007f1a06400000)
	libicudata.so.72 => /opt/icu-bin/lib64/libicudata.so.72 (0x00007f1a04600000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1a097c9000)
	libicui18n.so.73 => /usr/lib64/libicui18n.so.73 (0x00007f1a04200000)
	libicuuc.so.73 => /usr/lib64/libicuuc.so.73 (0x00007f1a03e00000)
	libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f1a040b9000)
	libdouble-conversion.so.3 => /usr/lib64/libdouble-conversion.so.3 (0x00007f1a08e69000)
	libb2.so.1 => /usr/lib64/libb2.so.1 (0x00007f1a08e5f000)
	libpcre2-16.so.0 => /usr/lib64/libpcre2-16.so.0 (0x00007f1a08b70000)
	libEGL.so.1 => /usr/lib64/libEGL.so.1 (0x00007f1a08e49000)
	libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f1a087b3000)
	libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f1a03cbb000)
	libQt6DBus.so.6 => /usr/lib64/libQt6DBus.so.6 (0x00007f1a0695a000)
	libxkbcommon.so.0 => /usr/lib64/libxkbcommon.so.0 (0x00007f1a0876b000)
	libGLX.so.0 => /usr/lib64/libGLX.so.0 (0x00007f1a08b3c000)
	libOpenGL.so.0 => /usr/lib64/libOpenGL.so.0 (0x00007f1a08e1e000)
	libpng16.so.16 => /usr/lib64/libpng16.so.16 (0x00007f1a07e16000)
	libharfbuzz.so.0 => /usr/lib64/libharfbuzz.so.0 (0x00007f1a03b8c000)
	libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f1a03ac0000)
	libicudata.so.73 => /usr/lib64/libicudata.so.73 (0x00007f1a01c00000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f1a06e85000)
	libgomp.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/13/libgomp.so.1 (0x00007f1a077b3000)
	libGLdispatch.so.0 => /usr/lib64/libGLdispatch.so.0 (0x00007f1a04547000)
	libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f1a07787000)
	libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f1a0692f000)
	libdbus-1.so.3 => /usr/lib64/libdbus-1.so.3 (0x00007f1a0406b000)
	libgraphite2.so.3 => /usr/lib64/libgraphite2.so.3 (0x00007f1a06909000)
	libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f1a08e19000)
	libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00007f1a07e0e000)

Что я делаю не так и как быть?

Ответ на: комментарий от firkax
strings /opt/icu-bin/lib64/libicuuc.so.72 | grep ByteSinkE | grep _ZTIN
_ZTIN3icu18CharStringByteSinkE
_ZTIN3icu8ByteSinkE
_ZTIN3icu20CheckedArrayByteSinkE
strings /opt/icu-bin/lib64/libicuuc.so.72 | grep ByteSinkE
_ZNK3icu6Locale15getKeywordValueENS_11StringPieceERNS_8ByteSinkER10UErrorCode
_ZN3icu12ByteSinkUtil12appendChangeEiPKDsiRNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu12ByteSinkUtil12appendChangeEPKhS2_PKDsiRNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu12ByteSinkUtil15appendCodePointEiiRNS_8ByteSinkEPNS_5EditsE
_ZN3icu12ByteSinkUtil14appendTwoBytesEiRNS_8ByteSinkE
_ZN3icu12ByteSinkUtil23appendNonEmptyUnchangedEPKhiRNS_8ByteSinkEjPNS_5EditsE
_ZN3icu12ByteSinkUtil15appendUnchangedEPKhS2_RNS_8ByteSinkEjPNS_5EditsER10UErrorCode
_ZTVN3icu18CharStringByteSinkE
_ZTIN3icu18CharStringByteSinkE
_ZTSN3icu18CharStringByteSinkE
_ZTIN3icu8ByteSinkE
_ZTVN3icu20CheckedArrayByteSinkE
_ZTIN3icu20CheckedArrayByteSinkE
_ZTVN3icu8ByteSinkE
_ZTSN3icu8ByteSinkE
_ZTSN3icu20CheckedArrayByteSinkE
_ZNK3icu9BytesTrie12getNextBytesERNS_8ByteSinkE
_ZN3icu9BytesTrie18getNextBranchBytesEPKhiRNS_8ByteSinkE
_ZN3icu9BytesTrie6appendERNS_8ByteSinkEi
_ZNK3icu19FilteredNormalizer213normalizeUTF8EjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu19FilteredNormalizer213normalizeUTF8EjPKciRNS_8ByteSinkEPNS_5EditsE17USetSpanConditionR10UErrorCode
_ZNK3icu6Locale13toLanguageTagERNS_8ByteSinkER10UErrorCode
_ZNK3icu6Locale22getUnicodeKeywordValueENS_11StringPieceERNS_8ByteSinkER10UErrorCode
_ZNK3icu11Normalizer213normalizeUTF8EjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu13UnicodeString6toUTF8ERNS_8ByteSinkE
_ZNK3icu20DecomposeNormalizer213normalizeUTF8EjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu15Normalizer2Impl13decomposeUTF8EjPKhS2_PNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu18ComposeNormalizer213normalizeUTF8EjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu15Normalizer2Impl11composeUTF8EjaPKhS2_PNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu15NoopNormalizer213normalizeUTF8EjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu10GreekUpper7toUpperEjPKhiRNS_8ByteSinkEPNS_5EditsER10UErrorCode
_Z16ucasemap_mapUTF8ijPN3icu13BreakIteratorEPKciPFvijS1_PKhiRNS_8ByteSinkEPNS_5EditsER10UErrorCodeES7_S9_SB_
_Z16ucasemap_mapUTF8ijPN3icu13BreakIteratorEPciPKciPFvijS1_PKhiRNS_8ByteSinkEPNS_5EditsER10UErrorCodeESA_SC_
_ZN3icu7CaseMap11utf8ToLowerEPKcjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu7CaseMap11utf8ToUpperEPKcjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu7CaseMap8utf8FoldEjNS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZN3icu7CaseMap11utf8ToTitleEPKcjPNS_13BreakIteratorENS_11StringPieceERNS_8ByteSinkEPNS_5EditsER10UErrorCode
_ZNK3icu4IDNA17labelToASCII_UTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu4IDNA18labelToUnicodeUTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu4IDNA16nameToASCII_UTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu4IDNA17nameToUnicodeUTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu5UTS4617labelToASCII_UTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu5UTS4611processUTF8ENS_11StringPieceEaaRNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu5UTS4618labelToUnicodeUTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu5UTS4616nameToASCII_UTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
_ZNK3icu5UTS4617nameToUnicodeUTF8ENS_11StringPieceERNS_8ByteSinkERNS_8IDNAInfoER10UErrorCode
N3icu18CharStringByteSinkE
N3icu8ByteSinkE
N3icu20CheckedArrayByteSinkE
LongLiveUbuntu ★★★★★
() автор топика

Что я делаю не так

Ты ставишь пакет, у которого в зависимостях icu - блоатварь с постоянно ломающимся API

и как быть?

Можно пытаться избежать бинарных пакетов с icu в зависимостях. Да, не всегда это возможно, но если есть альтернатива достаточная по функциональности, использовать её.
Если же это невозможно (например тебе нужна продвинутая работа с юникодовым текстом, а ICU - основная библиотека для этих задач, при этом нужен именно бинарниый пакет) - попробуй взять версию libICU из дистрибутива, в котором этот FBReader работает и запускать, положить его в хомяк его с LD_LIBRARY_PATH.
Так же стоит завести баг на ебилд этого fbreader, если у тебя бинарная версия, которая поставилась в opt не содержит все зависимости с нестабильным ABI в том же /opt

mittorn ★★★★★
()

Что я делаю не так и как быть?

Ты используешь дистрибутив, который для тебя слишком сложный.
Я никогда не использовал генту, но если сам не можешь решить такие элементарные(я надеюсь что в генте это элементарно) проблемы, то есть смысл задуматься о смене дистрибутива.

arax ★★
()
Последнее исправление: arax (всего исправлений: 1)

Что я делаю не так и как быть?

  1. Сделай себе сборочный сервер, чтобы сборка не отвлекала от игр на рабочей машине.
  2. собери FBReader 2.0 включая все его зависимости до самого низа
  3. установи бинарно со всем зависимостями.

Если выполнять пункт 3 игнорируя другие пакеты в системе, то может быть что-нибудь ещё сломается, но это неважно, потому что именно FBReader точно будет работать, а остальное потом починишь.

Shushundr ★★★
()

Может получится, если оставить либы, которые идут с софтиной в комплекте и сделать либо wrapper с помощью make_wrapper в разделе src_install() для запуска из opt (возможно, с передачей LD_LIBRARY_PATH), либо патчить rpath с помощью patchelf, как в firefox-bin.

grem ★★★★★
()
Ответ на: комментарий от token_polyak

Я все понимаю, но я хочу опакетить новый FBReader. Нравится он мне, да и прикипел я, что ли. Пробовал Cool Reader. Штука хорошая, но не зашло: показался тяжеловатым каким-то. А вот FBReader - самое то, плюс в второй версии теперь можно синкаться по сети с версией для Андроид.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от grem

Не, это rpmка в которой исполняемый файл, иконка и desktop-файл для меню. Ну и зависимости, прописаны. Только rpm.src у меня нет и что там именно, сказать не могу, угадывал по выхлопу ldd. Из отличий сборки - оставил только библиотеки и собираю только 64 бита, так как собирать и 32 бита смысла нет.

Вот ебилд:

# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

# Please bump with dev-libs/icu-layoutex

PYTHON_COMPAT=( python3_{10..11} )
VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/icu.asc
inherit autotools flag-o-matic python-any-r1 toolchain-funcs verify-sig

MY_PV=${PV/_rc/-rc}
MY_PV=${MY_PV//./_}

DESCRIPTION="International Components for Unicode"
HOMEPAGE="https://icu.unicode.org/"
SRC_URI="https://github.com/unicode-org/icu/releases/download/release-${MY_PV/_/-}/icu4c-${MY_PV/-rc/rc}-src.tgz"
SRC_URI+=" verify-sig? ( https://github.com/unicode-org/icu/releases/download/release-${MY_PV/_/-}/icu4c-${MY_PV/-rc/rc}-src.tgz.asc )"
S="${WORKDIR}"/icu/source

if [[ ${PV} != *_rc* ]] ; then
	KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris"
fi
LICENSE="BSD"
SLOT="0/${PV%.*}.1"
IUSE="debug doc examples static-libs test"
RESTRICT="!test? ( test )"

BDEPEND="
	${PYTHON_DEPS}
	sys-devel/autoconf-archive
	virtual/pkgconfig
	doc? ( app-doc/doxygen[dot] )
	verify-sig? ( >=sec-keys/openpgp-keys-icu-20221020 )
"

PATCHES=(
	"${FILESDIR}/${PN}-65.1-remove-bashisms.patch"
	"${FILESDIR}/${PN}-64.2-darwin.patch"
	"${FILESDIR}/${PN}-68.1-nonunicode.patch"
)

QA_PREBUILT="/opt/icu-bin"

src_prepare() {
	default

	# Disable renaming as it assumes stable ABI and that consumers
	# won't use unofficial APIs. We need this despite the configure argument.
	sed -i \
		-e "s/#define U_DISABLE_RENAMING 0/#define U_DISABLE_RENAMING 1/" \
		common/unicode/uconfig.h || die

	# Fix linking of icudata
	sed -i \
		-e "s:LDFLAGSICUDT=-nodefaultlibs -nostdlib:LDFLAGSICUDT=:" \
		config/mh-linux || die

	# Append doxygen configuration to configure
	sed -i \
		-e 's:icudefs.mk:icudefs.mk Doxyfile:' \
		configure.ac || die

	eautoreconf
}

src_configure() {
	MAKEOPTS+=" VERBOSE=1"
	local myeconfargs=(
		--prefix=${QA_PREBUILT}
	)
	econf --prefix=${QA_PREBUILT}

	# ICU tries to append -std=c++11 without this, so as of 71.1,
	# despite GCC 9+ using c++14 (or gnu++14) and GCC 11+ using gnu++17,
	# we still need this.
	append-cxxflags -std=c++14
	echo "${myeconfargs[0]}"
}

src_compile() {
	default

	if use doc; then
    	doxygen -u Doxyfile || die
		doxygen Doxyfile || die
	fi
}

src_install() {
	emake install DESTDIR=${D}
	if use doc; then
		docinto html
		dodoc -r doc/html/*
	fi
	rm -r ${D}/usr
}

pkg_postinst() {
	rm -r ${D}/${QA_PREBUILT}/bin
	rm -r ${D}/${QA_PREBUILT}/include
	rm -r ${D}/${QA_PREBUILT}/sbin
	dosym -r ${QA_PREBUILT}/lib64 ${QA_PREBUILT}/lib
	cp ${FILESDIR}/icu-bin.so.conf ${EPREFIX}/etc/ld.so.conf.d
}

pkg_postrm() {
	rm -rf ${QA_PREBUILT}
	rm ${EPREFIX}/ld.so.conf.d/icu-bin.so.conf
}

LongLiveUbuntu ★★★★★
() автор топика
Последнее исправление: LongLiveUbuntu (всего исправлений: 1)
Ответ на: комментарий от mittorn

Я ебилд для FBReader пишу. Ему нужен ICU 72, который в систему уже напрямую поставить нельзя. Пришлось извращаться и ставить нужный в /opt под другим именем и правкой ldconfig.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

да, так и надо. Из возможных подводных - если есть ещё какая-то зависимость, требующая libICU, которая берётся из системы - может конфликт символов произойти. Если таковые имеются - их бы тоже впакетировать. В firefox, собранном мозиллой с этим большие проблемы были - я пытался запустить в арче бинарник старого firefox - он молча схлопывался. А причина была, что там harfbuzz был и в системе кому-то нужен был harfbuzz из зависимостей - в итоге они что-то между собой не поделили - и вроде все символы на месте, но абортится при запуске

mittorn ★★★★★
()

Оффтоп. Сколько использовал разных читалок, и FBReader, и Cool Reader и каких только не было. Но в итоге понял, что лучше браузерного расширения ничего нет, fb2-reader. Все равно firefox всегда запущен.

Правда он у меня открыт, образно говоря, в формате листа A4 (жестко заданы размеры окна браузера). Так читать удобно, да и сайты уже умеют подстраиваться и не требуют распахивать браузер на весь экран.

krasnh ★★★
()
Ответ на: комментарий от krasnh

Не похоже, по крайней мере по скриншотам, что у него можно настроить цвет фона.

На Андроиде я пока остановился на ReadEra, который использует наработки CoolReader и других софтин. Правда попользоваться пока толком не успел :D

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
eix coolreader
* app-text/coolreader
     Доступные версии:      [M]3.2.59-r4 {wxwidgets}
     Домашняя страница:     https://github.com/buggins/coolreader/
     Описание:              CoolReader - reader of eBook files (fb2,epub,htm,rtf,txt)

А альтернатив-то и нет.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от bugfixer

Если со вторым и третьим ответы простые, то первое весьма интересно.

3) Букву F мне было лень писать (grep -F) а в строках нет никаких регэксповых спецсимволов так что ответ будет тем же (может скорость ниже только если оно не умеет оптимизировать такое).

2) Про c++filt я не знал или не помнил (и наверно забуду уже завтра), но он тут не нужен: в тексте ошибки указано декорированное имя функции, по нему и будем искать. Как она там называлась в исходнике - не важно.

1а) Я просто привык искать строки через strings и не думать о деталях их роли в бинарнике. Не важно - имя функции это, версия программы или какой-нить другой текст из неё. Про то, что это можно было бы найти через nm, я позже подумал, но вроде без разницы.

1б) Сейчас проверил - оказывается nm не работает.

$ nm -o /usr/lib/i386-linux-gnu/libicuuc.so.67.1
nm: /usr/lib/i386-linux-gnu/libicuuc.so.67.1: нет символов
$ file /usr/lib/i386-linux-gnu/libicuuc.so.67.1
/usr/lib/i386-linux-gnu/libicuuc.so.67.1: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=f4808c52328e01d59304fe921eea551503cb6845, stripped
Первый раз вижу stripped библиотеку, как такое вообще может быть?

Посмотрел man nm, выяснилось то nm -D показывает норм. А ещё у него есть ключ -C который делает то же самое что c++filt. Ну вот, как оказалось, просто бездумно запустить nm всё равно не получилось быЮ пришлось читать ман - это минус. А strings всегда работает и не требует никаких опций.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Про c++filt я не знал или не помнил

Ну, хоть в чём то я пригодился :) На самом деле - «полезняшка».

Я просто привык искать строки через strings

Оно зачастую очень много ненужного garbage генерит. Я так только на корки смотрю если последние log messages что ещё не за’flush’ались выгрызти хочется.

и не думать

А вот это - напрасно. Не стОит так…

bugfixer ★★★★★
()