Статус: Участник
Группы: Участники
Зарегистрирован: 18.07.2019(UTC) Сообщений: 23 Откуда: Kazan Сказал(а) «Спасибо»: 4 раз
|
Добрый день. Не удается включить библиотеку КриптоПро в проект под SailfishOS. Суть проблемы: ld не может найти библиотеку КриптоПро( вывод ld). В pro-файл проекта включил пути библиотекам и инклудам КриптоПро(/opt/cprocsp/lib/arm/ и /opt/cprocsp/include/). Непосредственно на устройстве библиотека находится( вывод ld). Даже удалось собрать примеры из папки /opt/cprocsp/src/samples/CSP. Но для успешной сборки приложения под Sailfish с использованием SailfishSDK требуется, чтобы используемые библиотеки успешно цеплялась при сборке посредством build-engine. Использованные версии Sailfish: 3.0.2.8, 3.0.3.9, 3.0.3.10+omp0.1.3.10. Испробованные версии CryptoProCSP: 4.0(сертифицированная) и 5.0. И, собственно, вопрос - как все эти проблемы решить и собрать приложение, использующее КриптоПро? Отредактировано пользователем 19 июля 2019 г. 11:35:03(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.07.2019(UTC) Сообщений: 23 Откуда: Kazan Сказал(а) «Спасибо»: 4 раз
|
Удалось подключить библиотеки к проекту. Шаги следующие: 1. Добавить в .pro файле QMAKE_RPATHDIR += \ /opt/cprocsp/lib/arm \ /srv/mer/targets/$$(MER_SSH_TARGET_NAME)/lib \ /srv/mer/targets/$$(MER_SSH_TARGET_NAME)/usr/lib 2. Также в .pro файлике добавить библиотеку(на примере libssp) LIBS += \ -L/opt/cprocsp/lib/arm -lssp 3. Задать INCLUDE_PATH в .pro INCLUDEPATH += \ /opt/cprocsp/include
После этого сборка приложения проходит успешно.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 16.04.2008(UTC) Сообщений: 1,260
Сказал(а) «Спасибо»: 21 раз Поблагодарили: 443 раз в 322 постах
|
Также может помочь указание rpath: Код:[SB2 sdk-build SailfishOS-armv7hl] cpbuilder@build-sff26-cross / $ ld -L/dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm -lcapi10 --verbose -rpath /dailybuilds/sailfish-release/pkg/instbase/opt/cprocsp/lib/arm -o /tmp/x
GNU ld (GNU Binutils) 2.25
Supported emulations:
armelf_linux_eabi
armelfb_linux_eabi
elf_i386
i386linux
elf32_x86_64
using internal linker script:
==================================================
/* Script for -z combreloc: combine and sort reloc sections */
/* Copyright (C) 2014 Free Software Foundation, Inc.
Copying and distribution of this script, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
"elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SEARCH_DIR("=/opt/cross/armv7hl-meego-linux-gnueabi/lib"); SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
SECTIONS
{
/* Read-only sections, merged into text segment: */
PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x00010000)); . = SEGMENT_START("text-segment", 0x00010000) + SIZEOF_HEADERS;
.interp : { *(.interp) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
.hash : { *(.hash) }
.gnu.hash : { *(.gnu.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.dyn :
{
*(.rel.init)
*(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
*(.rel.fini)
*(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
*(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*)
*(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
*(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
*(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
*(.rel.ctors)
*(.rel.dtors)
*(.rel.got)
*(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
PROVIDE_HIDDEN (__rel_iplt_start = .);
*(.rel.iplt)
PROVIDE_HIDDEN (__rel_iplt_end = .);
}
.rela.dyn :
{
*(.rela.init)
*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
*(.rela.fini)
*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
*(.rela.ctors)
*(.rela.dtors)
*(.rela.got)
*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
PROVIDE_HIDDEN (__rela_iplt_start = .);
*(.rela.iplt)
PROVIDE_HIDDEN (__rela_iplt_end = .);
}
.rel.plt :
{
*(.rel.plt)
}
.rela.plt :
{
*(.rela.plt)
}
.init :
{
KEEP (*(SORT_NONE(.init)))
}
.plt : { *(.plt) }
.iplt : { *(.iplt) }
.text :
{
*(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
}
.fini :
{
KEEP (*(SORT_NONE(.fini)))
}
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
.rodata1 : { *(.rodata1) }
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
PROVIDE_HIDDEN (__exidx_start = .);
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
PROVIDE_HIDDEN (__exidx_end = .);
.eh_frame_hdr : { *(.eh_frame_hdr) }
.eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) }
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table
.gcc_except_table.*) }
/* These sections are generated by the Sun/Oracle C++ compiler. */
.exception_ranges : ONLY_IF_RO { *(.exception_ranges
.exception_ranges*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
. = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
/* Exception handling */
.eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
.gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
.exception_ranges : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
/* Thread Local Storage sections */
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.preinit_array :
{
PROVIDE_HIDDEN (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array ))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array ))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.ctors :
{
/* gcc uses crtbegin.o to find the start of
the constructors, so we make sure it is
first. Because this is a wildcard, it
doesn't matter if the user does not
actually link against crtbegin.o; the
linker won't look for a file to match a
wildcard. The wildcard also means that it
doesn't matter which directory crtbegin.o
is in. */
KEEP (*crtbegin.o(.ctors))
KEEP (*crtbegin?.o(.ctors))
/* We don't want to include the .ctor section from
the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*crtbegin?.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
}
.jcr : { KEEP (*(.jcr)) }
.data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) }
.dynamic : { *(.dynamic) }
. = DATA_SEGMENT_RELRO_END (0, .);
.got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
.data :
{
PROVIDE (__data_start = .);
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
.data1 : { *(.data1) }
_edata = .; PROVIDE (edata = .);
. = .;
__bss_start = .;
__bss_start__ = .;
.bss :
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections.
FIXME: Why do we need it? When there is no .bss section, we don't
pad the .data section. */
. = ALIGN(. != 0 ? 32 / 8 : 1);
}
_bss_end__ = . ; __bss_end__ = . ;
. = ALIGN(32 / 8);
. = SEGMENT_START("ldata-segment", .);
. = ALIGN(32 / 8);
__end__ = . ;
_end = .; PROVIDE (end = .);
. = DATA_SEGMENT_END (.);
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }
/* DWARF debug sections.
Symbols in the DWARF debugging sections are relative to the beginning
of the section so we begin them at 0. */
/* DWARF 1 */
.debug 0 : { *(.debug) }
.line 0 : { *(.line) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { *(.debug_srcinfo) }
.debug_sfnames 0 : { *(.debug_sfnames) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { *(.debug_aranges) }
.debug_pubnames 0 : { *(.debug_pubnames) }
/* DWARF 2 */
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
.debug_abbrev 0 : { *(.debug_abbrev) }
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) }
.debug_frame 0 : { *(.debug_frame) }
.debug_str 0 : { *(.debug_str) }
.debug_loc 0 : { *(.debug_loc) }
.debug_macinfo 0 : { *(.debug_macinfo) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { *(.debug_weaknames) }
.debug_funcnames 0 : { *(.debug_funcnames) }
.debug_typenames 0 : { *(.debug_typenames) }
.debug_varnames 0 : { *(.debug_varnames) }
/* DWARF 3 */
.debug_pubtypes 0 : { *(.debug_pubtypes) }
.debug_ranges 0 : { *(.debug_ranges) }
/* DWARF Extension. */
.debug_macro 0 : { *(.debug_macro) }
.gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
/DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }
}
==================================================
attempt to open /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so succeeded
-lcapi10 (/dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so)
librdrsup.so.4 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found librdrsup.so.4 at /dailybuilds/sailfish-release/pkg/instbase/opt/cprocsp/lib/arm/librdrsup.so.4
libdl.so.2 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libdl.so.2 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libdl.so.2
libpthread.so.0 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libpthread.so.0 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libpthread.so.0
libstdc++.so.6 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libstdc++.so.6 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/usr/lib/libstdc++.so.6
libm.so.6 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libm.so.6 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libm.so.6
libc.so.6 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libc.so.6 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libc.so.6
libgcc_s.so.1 needed by /dailybuilds/sailfish-release/pkg/instbase//opt/cprocsp/lib/arm/libcapi10.so
found libgcc_s.so.1 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libgcc_s.so.1
ld-linux-armhf.so.3 needed by /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/libdl.so.2
found ld-linux-armhf.so.3 at /parentroot/srv/mer/targets/SailfishOS-armv7hl/lib/ld-linux-armhf.so.3
/opt/cross/bin/armv7hl-meego-linux-gnueabi-ld: warning: cannot find entry symbol _start; defaulting to 00010144
[SB2 sdk-build SailfishOS-armv7hl] cpbuilder@build-sff26-cross / $ echo $?
0
|
|
1 пользователь поблагодарил Русев Андрей за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.07.2019(UTC) Сообщений: 23 Откуда: Kazan Сказал(а) «Спасибо»: 4 раз
|
UPD: Для корректной работы с библиотеками, нужно установить необходимые пакеты КриптоПро в build-engine с помощью команд вида: sb2 -t {ВАША_КОНФИГУРАЦИЯ} -m sdk-install -R zypper in {ПУТЬ_К_RPM_ПАКЕТУ}
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close