Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline kartaris  
#1 Оставлено : 18 июля 2019 г. 15:26:02(UTC)
kartaris

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline kartaris  
#2 Оставлено : 19 июля 2019 г. 11:43:25(UTC)
kartaris

Статус: Участник

Группы: Участники
Зарегистрирован: 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

После этого сборка приложения проходит успешно.
Offline Русев Андрей  
#3 Оставлено : 19 июля 2019 г. 16:14:34(UTC)
Русев Андрей

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 16.04.2008(UTC)
Сообщений: 1,260

Сказал(а) «Спасибо»: 21 раз
Поблагодарили: 442 раз в 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
Официальная техподдержка. Официальная база знаний.
thanks 1 пользователь поблагодарил Русев Андрей за этот пост.
kartaris оставлено 22.07.2019(UTC)
Offline kartaris  
#4 Оставлено : 22 июля 2019 г. 15:55:02(UTC)
kartaris

Статус: Участник

Группы: Участники
Зарегистрирован: 18.07.2019(UTC)
Сообщений: 23
Российская Федерация
Откуда: Kazan

Сказал(а) «Спасибо»: 4 раз
UPD:
Для корректной работы с библиотеками, нужно установить необходимые пакеты КриптоПро в build-engine с помощью команд вида:
sb2 -t {ВАША_КОНФИГУРАЦИЯ} -m sdk-install -R zypper in {ПУТЬ_К_RPM_ПАКЕТУ}
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.