Page 6 of 7 FirstFirst ... 4567 LastLast
Results 76 to 90 of 95

Thread: Кросс-компиляция rTorrent

  1. #76
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222

    Red face Безуспешные попытки

    Code:
    ldd /opt/lib-oleg/libsigc-2.0.so.0
    checking sub-depends for '/opt/lib/libstdc++.so.6'
    checking sub-depends for '/opt/lib/libm.so.0'
    checking sub-depends for '/opt/lib/libc.so.0'
    checking sub-depends for '/opt/lib/libgcc_s.so.1'
    checking sub-depends for 'not found'
            libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x00000000)
            libm.so.0 => /opt/lib/libm.so.0 (0x00000000)
            libc.so.0 => /opt/lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x00000000)
            libintl.so.0 => not found (0x00000000)
            not a dynamic executable
    ldd /opt/lib-oleg/libtorrent.so.14
    checking sub-depends for '/opt/lib-oleg/libcrypto.so.1.0.0'
    checking sub-depends for '/opt/lib-oleg/libsigc-2.0.so.0'
    checking sub-depends for '/opt/lib/libstdc++.so.6'
    checking sub-depends for '/opt/lib/libm.so.0'
    checking sub-depends for '/opt/lib/libc.so.0'
    checking sub-depends for '/opt/lib/libgcc_s.so.1'
    checking sub-depends for '/opt/lib/libdl.so.0'
    checking sub-depends for 'not found'
            libcrypto.so.1.0.0 => /opt/lib-oleg/libcrypto.so.1.0.0 (0x00000000)
            libsigc-2.0.so.0 => /opt/lib-oleg/libsigc-2.0.so.0 (0x00000000)
            libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x00000000)
            libm.so.0 => /opt/lib/libm.so.0 (0x00000000)
            libc.so.0 => /opt/lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x00000000)
            libdl.so.0 => /opt/lib/libdl.so.0 (0x00000000)
            libintl.so.0 => not found (0x00000000)
            /opt/lib/ld-uClibc.so.0 => /opt/lib/ld-uClibc.so.0 (0x00000000)
    libintl.so.0
    В /opt/lib есть libintl-0.9.28.so, но ведь эта либа собрана с uClibc 0.9.28 (если я правильно понял), а энтузиастский тулчейн содержит uClibc 0.9.32 .... И как быть??? libintl составляющая gettext (так вроде?), и gettext собирать???
    RT-N16 + Entware repo

  2. #77
    Quote Originally Posted by voidshah View Post
    Code:
    ldd /opt/lib-oleg/libsigc-2.0.so.0
    checking sub-depends for '/opt/lib/libstdc++.so.6'
    checking sub-depends for '/opt/lib/libm.so.0'
    checking sub-depends for '/opt/lib/libc.so.0'
    checking sub-depends for '/opt/lib/libgcc_s.so.1'
    checking sub-depends for 'not found'
            libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x00000000)
            libm.so.0 => /opt/lib/libm.so.0 (0x00000000)
            libc.so.0 => /opt/lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x00000000)
            libintl.so.0 => not found (0x00000000)
            not a dynamic executable
    Не допустимо, чтобы софт, собранный с энтузиастким тулчейном с uClibc 0.9.32 линковался с optware'овской uClibc 0.9.28. Ниже представлены связи libsigcxx из энтузиасткого тулчейна с ключевыми библиотеками:
    Code:
    $ ldd /opt/lib/libsigc-2.0.so.0
    checking sub-depends for '/opt/lib/libstdc++.so.6'
    checking sub-depends for '/lib/libm.so.0'
    checking sub-depends for '/lib/libc.so.0'
    checking sub-depends for '/lib/libgcc_s.so.1'
    checking sub-depends for '/lib/ld-uClibc.so.0'
            libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x00000000)
            libm.so.0 => /lib/libm.so.0 (0x00000000)
            libc.so.0 => /lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00000000)
            ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x00000000)
            not a dynamic executable
    Пусть путь /opt/lib в примере вас не смущает - у меня не optware, а OpenWRT, собранный энтузиастким тулчейном.
    Quote Originally Posted by voidshah View Post
    Code:
    ldd /opt/lib-oleg/libtorrent.so.14...
    libintl.so.0
    В /opt/lib есть libintl-0.9.28.so, но ведь эта либа собрана с uClibc 0.9.28 (если я правильно понял), а энтузиастский тулчейн содержит uClibc 0.9.32 .... И как быть??? libintl составляющая gettext (так вроде?), и gettext собирать???
    Скачайте готовый пакет из Optware или из OpenWRT и посмотрите зависимости самостоятельно.

  3. #78
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222
    Так я и не линковал. По -rpath ищет зависимости просто. Правильно ли я понимаю, что можно взять у тебя (плз не выкай мне больше) libstdc++ - и этого будет достаточно?
    UPD.
    Вау! Работает!
    Code:
    [admin@RT-20CF30CE0B4E rtorrent 0.8.9]$ ldd /opt/lib-oleg/libsigc-2.0.so
    checking sub-depends for '/opt/lib-oleg/libstdc++.so.6'
    checking sub-depends for '/opt/lib/libm.so.0'
    checking sub-depends for '/opt/lib/libc.so.0'
    checking sub-depends for '/opt/lib/libgcc_s.so.1'
            libstdc++.so.6 => /opt/lib-oleg/libstdc++.so.6 (0x00000000)
            libm.so.0 => /opt/lib/libm.so.0 (0x00000000)
            libc.so.0 => /opt/lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x00000000)
            not a dynamic executable
     ldd /opt/lib-oleg/libtorrent.so.14
    checking sub-depends for '/opt/lib-oleg/libcrypto.so.1.0.0'
    checking sub-depends for '/opt/lib-oleg/libsigc-2.0.so.0'
    checking sub-depends for '/opt/lib-oleg/libstdc++.so.6'
    checking sub-depends for '/opt/lib/libm.so.0'
    checking sub-depends for '/opt/lib/libc.so.0'
    checking sub-depends for '/opt/lib/libgcc_s.so.1'
    checking sub-depends for '/opt/lib/libdl.so.0'
            libcrypto.so.1.0.0 => /opt/lib-oleg/libcrypto.so.1.0.0 (0x00000000)
            libsigc-2.0.so.0 => /opt/lib-oleg/libsigc-2.0.so.0 (0x00000000)
            libstdc++.so.6 => /opt/lib-oleg/libstdc++.so.6 (0x00000000)
            libm.so.0 => /opt/lib/libm.so.0 (0x00000000)
            libc.so.0 => /opt/lib/libc.so.0 (0x00000000)
            libgcc_s.so.1 => /opt/lib/libgcc_s.so.1 (0x00000000)
            libdl.so.0 => /opt/lib/libdl.so.0 (0x00000000)
            /opt/lib/ld-uClibc.so.0 => /opt/lib/ld-uClibc.so.0 (0x00000000)
    И rtorrent подал признаки жизни!
    Code:
    rtorrent -h
    Rakshasa's BitTorrent client version 0.8.9.
    
    All value pairs (f.ex rate and queue size) will be in the UP/DOWN
    order. Use the up/down/left/right arrow keys to move between screens.
    
    Usage: rtorrent [OPTIONS]... [FILE]... [URL]...
      -h                Display this very helpful text
      -n                Don't try to load ~/.rtorrent.rc on startup
      -b <a.b.c.d>      Bind the listening socket to this IP
      -i <a.b.c.d>      Change the IP that is sent to the tracker
      -p <int>-<int>    Set port range for incoming connections
      -d <directory>    Save torrents to this directory by default
      -s <directory>    Set the session directory
      -o key=opt,...    Set options, see 'rtorrent.rc' file
    
    Main view keys:
      backspace         Add a torrent url or path
      ^s                Start torrent
      ^d                Stop torrent or delete a stopped torrent
      ^r                Manually initiate hash checking
      ^q                Initiate shutdown or skip shutdown process
      a,s,d,z,x,c       Adjust upload throttle
      A,S,D,Z,X,C       Adjust download throttle
      I                 Toggle whether torrent ignores ratio settings
      right             View torrent
    
    Download view keys:
      spacebar          Depends on the current view
      1,2               Adjust max uploads
      3,4,5,6           Adjust min/max connected peers
      t/T               Query tracker for more peers / Force query
      *                 Snub peer
      right             View files
      p                 View peer information
      o                 View trackers
    
    Report bugs to <jaris@ifi.uio.no>.
    Last edited by voidshah; 06-12-2011 at 16:43. Reason: проверено
    RT-N16 + Entware repo

  4. #79
    Да. Или сам возьми из тулчейна /opt/brcm/hndtools-mipsel-uclibc/lib

    ЗЫ. Только не устраивай в /opt/lib кашу из библиотек optware и собранных с помощью энтузиасткого тулчейна. До добра не доведёт.

    Quote Originally Posted by voidshah View Post
    UPD.
    Вау! Работает!
    Класс. Осталось проверить в боевых условиях.
    Last edited by ryzhov_al; 06-12-2011 at 16:50.

  5. #80
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222

    Smile

    Quote Originally Posted by ryzhov_al View Post
    Класс. Осталось проверить в боевых условиях.
    Еще прикрутил xmlrpc-c и...


    РАБОТАЕТ!
    RT-N16 + Entware repo

  6. #81
    Спасибо за протоптанную тропинку. Постараюсь вскоре включить обновлённый rtorrent в репозиторий OpenWRT.

  7. #82
    Join Date
    Mar 2011
    Location
    UA
    Posts
    222
    Quote Originally Posted by ryzhov_al View Post
    Спасибо за протоптанную тропинку. Постараюсь вскоре включить обновлённый rtorrent в репозиторий OpenWRT.
    Угу. только там настройки поменяли некоторые, а ман старый остался. Надо разбираться.
    RT-N16 + Entware repo

  8. #83
    При кросс-компиляции rTorrent 0.8.9/0.12.9 энтузиастким тулчейном (gcc 4.4.6 и uClibc 0.9.32 c epoll и posix_fallocate) возникает засада: в rtorrent не обрабатываются exceptions из динамически прилинкованной libtorrent. В момент между окончанием проверки хеша перед началом сидирования возникает необрабатываемое исключение std::exception.

    Где же баг? в uClibc? В GCC? В моей ДНК?
    При статической линковке никаких необрабатываемых исключений не возникает. Ниже приложена информация о конфигурации софта и ключах при компиляции.

    Ключи:
    Code:
    CFLAGS="-Os -pipe -mips32 -mtune=mips32 " 
    CXXFLAGS="-Os -pipe -mips32 -mtune=mips32 " 
    CPPFLAGS=" -fno-strict-aliasing -fno-inline "
    Лог rtorrent до момента возникновения исключения:
    Code:
    (12:28:27) Using 'epoll' based polling.
    (12:28:27) Using 'epoll' based polling.
    (12:28:27) XMLRPC initialized with 897 functions.
    (12:28:27) The SCGI socket is bound to a specific network device yet may still p
    ose a security risk, consider using 'scgi_local'.
    (12:28:27) Ignoring ~/.rtorrent.rc.
    (12:28:28) Starting DHT server on port 12345.
    
      Tracker[0:0]: Connecting to http://tracker.ccc.de:80/announce
    terminate called after throwing an instance of 'torrent::close_connection' what():  std::exception
    Статически линкованная стабильная рабочая сборка зависит от:
    Code:
    $ ldd /opt/bin/rtorrent
            libpthread.so.0 => /opt/lib/libpthread.so.0 (0x2aac0000)
            libncursesw.so.5 => /opt/lib/libncursesw.so.5 (0x2aae5000)
            libsigc-2.0.so.0 => /opt/lib/libsigc-2.0.so.0 (0x2ab2a000)
            libcurl.so.4 => /opt/lib/libcurl.so.4 (0x2ab43000)
            libxmlrpc_server.so.3 => /opt/lib/libxmlrpc_server.so.3 (0x2ab98000)
            libxmlrpc.so.3 => /opt/lib/libxmlrpc.so.3 (0x2abad000)
            libxmlrpc_util.so.3 => /opt/lib/libxmlrpc_util.so.3 (0x2abcf000)
            libxmlrpc_xmlparse.so.3 => /opt/lib/libxmlrpc_xmlparse.so.3 (0x2abe3000)
            libxmlrpc_xmltok.so.3 => /opt/lib/libxmlrpc_xmltok.so.3 (0x2abfc000)
            libstdc++.so.6 => /opt/lib/libstdc++.so.6 (0x2ac22000)
            libm.so.0 => /lib/libm.so.0 (0x2ad14000)
            libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x2ad30000)
            libc.so.0 => /lib/libc.so.0 (0x2ad52000)
            libcrypto.so.1.0.0 => /opt/lib/libcrypto.so.1.0.0 (0x2adcb000)
            libdl.so.0 => /lib/libdl.so.0 (0x2aefd000)
            libssl.so.1.0.0 => /opt/lib/libssl.so.1.0.0 (0x2af10000)
            libz.so.1 => /opt/lib/libz.so.1 (0x2af61000)
            ld-uClibc.so.0 => /lib/ld-uClibc.so.0 (0x2aaa8000)
    Не удивляйтесь тому, что некоторые прошивочные библиотеки, например libstdc++ и libpthread лежат в /opt/lib. Это - задел на будущее для томатовцев.

    Патчи - из транка OpenWRT плюс выкидывание непроходимого теста AM_PATH_CPPUNIT при конфигурировании.

    Конфиг libtorrent, сгенерированный GNU Build System, во вложении.
    Last edited by ryzhov_al; 28-02-2012 at 16:25.

  9. #84
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    При кросс-компиляции rTorrent 0.8.9/0.12.9 энтузиастким тулчейном (gcc 4.4.6 и uClibc 0.9.32 c epoll и posix_fallocate) возникает засада: в rtorrent не обрабатываются exceptions из динамически прилинкованной libtorrent. В момент между окончанием проверки хеша перед началом сидирования возникает необрабатываемое исключение std::exception.

    Где же баг? в uClibc? В GCC?
    Во-первых, для полноты картины всё же лучше видеть вывод backtrace gdb.

    Проблема, скорее всего, в связке c++ exceptions handler и uClibc. Гугл выдаёт несколько вариантов по этой проблеме:
    http://dev.openwrt.org/ticket/4924
    http://libtorrent.rakshasa.no/ticket/1686
    http://lists.busybox.net/pipermail/b...st/000152.html
    http://gcc.gnu.org/ml/gcc/2007-07/msg00275.html

    И интересное исследование по данной теме(еще не прочитал полностью сам) - http://filodej.blogspot.com/2008/07/...t-part-ii.html

  10. #85
    Quote Originally Posted by lly View Post
    И интересное исследование по данной теме(еще не прочитал полностью сам) - http://filodej.blogspot.com/2008/07/...t-part-ii.html
    Угу. Filodej смотрит ключи, с которыми был собран gcc:
    Code:
    $ /opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc -v
    Using built-in specs.
    Target: mipsel-linux-uclibc
    Configured with: /home/lly/Wl500/toolchain/build_dir/toolchain-mipsel_gcc4.4.6/gcc-4.4.6/configure --prefix=/opt/brcm/hndtools-mipsel-uclibc-4.4.6-K26 --build=x86_64-suse-linux --host=x86_64-suse-linux --target=mipsel-linux-uclibc --with-gnu-ld --enable-target-optspace --disable-libgomp --disable-libmudflap --disable-multilib --disable-nls --disable-__cxa_atexit --with-gmp=/home/lly/Wl500/toolchain/staging_dir/host --with-mpfr=/home/lly/Wl500/toolchain/staging_dir/host --disable-decimal-float --with-mips-plt --enable-libssp --enable-languages=c,c++ --enable-shared --enable-threads --enable-tls
    Thread model: posix
    gcc version 4.4.6 (GCC)
    И делает вывод:
    ... it seems that it is not configured with --enable-sjlj-exceptions.
    Но, на мой взгляд, эти рассуждения относились к более ранним версиям GCC 3.3..4.1.
    Вообще, после гугления по теме у меня сформировалась следующая картина: сначала обработка исключений была поломана в старых версиях GCC, затем дело упиралось в заглушки uClibc до ~0.9.30. Здоров ли механизм exceptions в современной uClib 0.9.32 я так и не понял, т.к. жалобы на него пишутся до сих пор.
    Last edited by ryzhov_al; 13-12-2011 at 11:26.

  11. #86
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    Но, на мой взгляд, эти рассуждения относились к более ранним версиям GCC 3.3..4.1.
    Да, но пару готовых примеров - throw1.cpp, throw2.cpp можно попробовать прогнать.

    Ключ "-fno-inline" не помогает?

    Вообще, после гугления по теме у меня сформировалась следующая картина: сначала обработка исключений была поломана в старых версиях GCC, затем дело упиралось в заглушки uClibc до ~0.9.30. Здоров ли механизм exceptions в современной uClib 0.9.32 я так и не понял, т.к. жалобы на него пишутся до сих пор.
    Скорее всего, не совсем И, так как проблема у тебя всплывает только при динамической линковке, она находится в ld.so

    P.S. Если есть возможность поковыряться с gdb - лучше сделать, т.к. фикс апстрима можно ждaть очень долго.

  12. #87
    Quote Originally Posted by lly View Post
    Ключ "-fno-inline" не помогает?
    Нет.
    Отключение фич posix_memalign\posix_fallocate\epoll тоже. Сейчас пересоберу без ключей оптимизации -Os -mtune=mips32 и попробую в работе, хотя это метод научного тыка.
    Quote Originally Posted by lly View Post
    P.S. Если есть возможность поковыряться с gdb - лучше сделать, т.к. фикс апстрима можно ждaть очень долго.
    gdb в руках не держал но заблаговременно собрал. Придётся взяться. Будет от него толк на strip'нутых бинарниках?

  13. #88
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    gdb в руках не держал но заблаговременно собрал. Придётся взяться. Будет от него толк на strip'нутых бинарниках?
    Небольшой, придётся каждый раз искать соответствие при помощи mipsel-linux-addr2line. Поэтому для отладки лучше без strip'а.

  14. #89
    Quote Originally Posted by ryzhov_al View Post
    Сейчас пересоберу без ключей оптимизации -Os -mtune=mips32 и попробую в работе, хотя это метод научного тыка.
    Заработал! Погоняю в тестах и напишу о выводах позже.

    В любом случае, приглашу-ка к диалогу тов.Novik'а - специалиста с мировым именем в области кросс-компиляции rtorrent'а. Он откопал грабли с исключениями годом раньше.

  15. #90
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    Заработал! Погоняю в тестах и напишу о выводах позже.
    Скорее всего влияет оптимизация "-Os", а не модель процессора "-mtune=mips32", но лучше перепроверить. Ключи оптимизации убирал только с библиотеки или и при сборке самого бинарника тоже?

Page 6 of 7 FirstFirst ... 4567 LastLast

Similar Threads

  1. Простая настройка роутера до торрентов
    By gostest in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 1402
    Last Post: 21-05-2010, 18:58
  2. [How to] rtorrent & ntorrent
    By mancub in forum WL-500gP Tutorials
    Replies: 101
    Last Post: 18-12-2008, 07:21
  3. small number of peers for rTorrent
    By ufo95 in forum WL-500gP Q&A
    Replies: 0
    Last Post: 10-11-2008, 08:23
  4. older rtorrent version
    By FastJack in forum WL-500gP Q&A
    Replies: 1
    Last Post: 23-10-2007, 09:40

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •