12

実行中

arm-none-linux-gnueabi-gcc -print-search-dirs | grep libraries | sed 's/:/\n/g'

次の出力が得られます。

libraries
 =/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/lib/arm-none-linux-gnueabi/4.4.1/
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/lib/
/opt/codesourcery/arm-none-linux-gnueabi/libc/lib/arm-none-linux-gnueabi/4.4.1/
/opt/codesourcery/arm-none-linux-gnueabi/libc/lib/
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/arm-none-linux-gnueabi/4.4.1/
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/

そして、いくつかのパッケージをクロスコンパイルするとき、これらのパスに追加できるようになると、私の人生がずっと楽になります。-L オプションについて知っていて、それを使用したいのですが、多くのパッケージはクロス コンパイル中にそれを尊重しません。さらに、codesourcery で使用すると問題が発生します。(詳細はこの投稿の最後を参照してください)。基本的に、パッケージをコンパイルするために必要なすべてのファイルを含むディレクトリ ツリー全体があり、そのディレクトリ ツリーをデフォルトの検索パスに追加したいと考えています。たとえば、-print-search-dirs も次のようなパスを出力するようにします。

/target/usr/lib
/target/lib

すでにリストされているパスに加えて。使用できるツールチェーンがいくつかあるため、コードソース固有の回答を探しているわけではありません。

興味のある方のために、codesourcery インストールからのエラーを次に示します。

arm-none-linux-gnueabi-gcc test.c

作品

arm-none-linux-gnueabi-gcc -L/usr/arm-unknown-linux-gnueabi/usr/lib test.c 

次のエラーで失敗します:

/lib/libc.so.6: file not recognized: File format not recognized
collect2: ld returned 1 exit status

明らかに、ホストから libc を取得しています。これが複数のツールチェーンで発生するのを見てきましたが、すべてではありません。

コメントへの応答: これ は出力です

arm-none-linux-gnueabi-gcc -L/usr/arm-unknown-linux-gnueabi/usr/lib test.c -v -Wl,-verbose
組み込みの仕様を使用します。
ターゲット: arm-none-linux-gnueabi
構成: /scratch/julian/2010q1-release-linux-lite/src/gcc-4.4-2010q1/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target =arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with- gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} %{O2:%{ !fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove- local-statics}}}' --enable-languages=c,c++ --enable-shared --disable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2010q1- 202' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/julian/ 2010q1-release-linux-lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/julian/2010q1-release-linux-lite/obj/host-libs-2010q1-202-arm- none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/julian/2010q1-release-linux-lite/obj/host-libs-2010q1-202-arm-none-linux- gnueabi-i686-pc-linux-gnu/usr --with-ppl=/scratch/julian/2010q1-release-linux-lite/obj/host-libs-2010q1-202-arm-none-linux-gnueabi-i686- pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm'--with-cloog=/scratch/julian/2010q1-release-linux-lite/obj/host-libs-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable- libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/julian/2010q1-release-linux-lite/install/arm-none-linux-gnueabi/bin --with-build- time-tools=/scratch/julian/2010q1-release-linux-lite/install/arm-none-linux-gnueabi/bin
スレッドモデル: posix
gcc バージョン 4.4.1 (Sourcery G++ Lite 2010q1-202)
COLLECT_GCC_OPTIONS='-L/usr/arm-unknown-linux-gnueabi/usr/lib' '-v' '-march=armv5te' '-funwind-tables'
 /opt/codesourcery/libexec/gcc/arm-none-linux-gnueabi/4.4.1/cc1 -quiet -v test.c -quiet -dumpbase test.c -march=armv5te -auxbase test -version -funwind-tables - o /tmp/ccaDSo09.s
存在しないディレクトリ「/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/local/include」を無視する
#include "..." 検索はここから始まります:
#include 検索はここから始まります:
 /opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/include
 /opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/include-fixed
 /opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/include
 /opt/codesourcery/arm-none-linux-gnueabi/libc/usr/include
検索リストの終わり。
GNU C (Sourcery G++ Lite 2010q1-202) バージョン 4.4.1 (arm-none-linux-gnueabi)
        GNU C バージョン 4.3.2、GMP バージョン 4.3.1、MPFR バージョン 2.4.2 でコンパイルされています。
GGC ヒューリスティック: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
コンパイラ実行可能チェックサム: 250bf78701f747da89e730786c466148
COLLECT_GCC_OPTIONS='-L/usr/arm-unknown-linux-gnueabi/usr/lib' '-v' '-march=armv5te' '-funwind-tables'
 /opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/as -v -march=armv5te -meabi=5 -o /tmp/ccQTJKJd.o /tmp/ccaDSo09.s
BFD バージョン (Sourcery G++ Lite 2010q1-202) を使用する GNU アセンブラー バージョン 2.19.51 (arm-none-linux-gnueabi) 2.19.51.20090709
COMPILER_PATH=/opt/codesourcery/libexec/gcc/arm-none-linux-gnueabi/4.4.1/:/opt/codesourcery/libexec/gcc/arm-none-linux-gnueabi/4.4.1/:/opt/codesourcery /libexec/gcc/arm-none-linux-gnueabi/:/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/:/opt/codesourcery/lib/gcc/arm-none-linux -gnueabi/:/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/
LIBRARY_PATH=/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/:/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../.. /../../arm-none-linux-gnueabi/lib/:/opt/codesourcery/arm-none-linux-gnueabi/libc/lib/:/opt/codesourcery/arm-none-linux-gnueabi/libc /usr/lib/
COLLECT_GCC_OPTIONS='-L/usr/arm-unknown-linux-gnueabi/usr/lib' '-v' '-march=armv5te' '-funwind-tables'
 /opt/codesourcery/libexec/gcc/arm-none-linux-gnueabi/4.4.1/collect2 --sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --eh-frame-hdr -dynamic-リンカ /lib/ld-linux.so.3 -X -m armelf_linux_eabi /opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crt1.o /opt/codesourcery/arm-none-linux-gnueabi /libc/usr/lib/crti.o /opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/crtbegin.o -L/usr/arm-unknown-linux-gnueabi/usr/lib -L/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1 -L/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../.. /../../arm-none-linux-gnueabi/lib -L/opt/codesourcery/arm-none-linux-gnueabi/libc/lib -L/opt/codesourcery/arm-none-linux-gnueabi/libc /usr/lib /tmp/ccQTJKJd.o -verbose -lgcc --必要に応じて -lgcc_s --必要に応じて不要 -lc -lgcc --必要に応じて -lgcc_s --必要に応じて不要 /opt/codesourcery /lib/gcc/arm-none-linux-gnueabi/4.4.1/crtend.o /opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crtn.o
GNU ld (Sourcery G++ Lite 2010q1-202) 2.19.51.20090709
  サポートされるエミュレーション:
   armelf_linux_eabi
   armelfb_linux_eabi
内部リンカー スクリプトを使用する場合:
==================================================
/* -z combreloc のスクリプト: reloc セクションの結合とソート */
OUTPUT_FORMAT("elf32-リトルアーム", "elf32-ビッグアーム",
              "elf32-リトルアーム")
OUTPUT_ARCH(アーム)
ENTRY(_start)
SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
セクション
{
  /* テキスト セグメントにマージされた読み取り専用セクション: */
  PROVIDE (__executable_start = SEGMENT_START("テキスト セグメント", 0x00008000)); . = SEGMENT_START("テキスト セグメント", 0x00008000) + SIZEOF_HEADERS;
  .interp: { *(.interp) }
  .note.gnu.build-id : { *(.note.gnu.build-id) }
  .ハッシュ: { *(.ハッシュ) }
  .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.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.*)
      *(.rel.ifunc)
    }
  .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.*)
      *(.rela.ifunc)
    }
  .rel.plt :
    {
      *(.rel.plt)
      PROVIDE_HIDDEN (__rel_iplt_start = .);
      *(.rel.iplt)
      PROVIDE_HIDDEN (__rel_iplt_end = .);
    }
  .rela.plt :
    {
      *(.rela.plt)
      PROVIDE_HIDDEN (__rela_iplt_start = .);
      *(.rela.iplt)
      PROVIDE_HIDDEN (__rela_iplt_end = .);
    }
  。初期化 :
  {
    キープ (*(.init))
  } =0
  .plt : { *(.plt) *(.iplt)}
  。文章 :
  {
    *(.text .stub .text.* .gnu.linkonce.t.*)
    /* .gnu.warning セクションは、elf32.em によって特別に処理されます。*/
    *(.gnu.warning)
    *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
  } =0
  .fini :
  {
    キープ (*(.fini))
  } =0
  提供 (__etext = .);
  提供 (_etext = .);
  提供 (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.*) }
  /* データ セグメントのアドレスを調整します。まで調整したい
     次のページのページ内の同じアドレス。*/
  . = ALIGN (定数 (MAXPAGESIZE)) - ((定数 (MAXPAGESIZE) - .) & (定数 (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE));
  /* 例外処理 */
  .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) }
  .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
  /* スレッドのローカル ストレージ セクション */
  .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.*)))
     キープ (*(.init_array))
     PROVIDE_HIDDEN (__init_array_end = .);
  }
  .fini_array :
  {
    PROVIDE_HIDDEN (__fini_array_start = .);
    KEEP (*(SORT(.fini_array.*)))
    キープ (*(.fini_array))
    PROVIDE_HIDDEN (__fini_array_end = .);
  }
  .ctors :
  {
    /* gcc は crtbegin.o を使用して、
       コンストラクターなので、それが確実であることを確認します
       最初。これはワイルドカードなので、
       ユーザーがしなくても構いません
       実際には crtbegin.o に対してリンクします。の
       リンカーは、一致するファイルを探しません。
       ワイルドカード。ワイルドカードは、
       どのディレクトリ crtbegin.o も関係ありません
       入っています。 */
    KEEP (*crtbegin.o(.ctors))
    KEEP (*crtbegin?.o(.ctors))
    /* からの .ctor セクションを含めたくありません
       ソートされた ctors の後まで crtend.o ファイル。
       crtend ファイルの .ctor セクションには、
       ctors マーカーの終わりであり、最後でなければなりません */
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
    KEEP (*(SORT(.ctors.*)))
    キープ (*(.ctors))
  }
  .dtors :
  {
    KEEP (*crtbegin.o(.dtors))
    KEEP (*crtbegin?.o(.dtors))
    KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
    KEEP (*(SORT(.dtors.*)))
    キープ (*(.dtors))
  }
  .jcr : { 保持 (*(.jcr)) }
  .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d. rel.ro.*) }
  .dynamic : { *(.dynamic) }
  . = DATA_SEGMENT_RELRO_END (0, .);
  .got : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
  。データ :
  {
    __data_start = . ;
    *(.data .data.* .gnu.linkonce.d.*)
    ソート(コンストラクタ)
  }
  .data1 : { *(.data1) }
  _edata = .; 提供 (edata = .);
  __bss_start = .;
  __bss_start__ = .;
  .bss :
  {
   *(.dynbss)
   *(.bss .bss.* .gnu.linkonce.b.*)
   *(一般)
   /* .bss セクションが最大で
      _終わり。.bss の後に配置して、
      入力セクションがないため、.bss セクションが表示されなくなります。
      FIXME: なぜ必要なのですか? .bss セクションがない場合は、
      .data セクションをパディングします。*/
   . = ALIGN(. != 0 ? 32 / 8 : 1);
  }
  _bss_end__ = . ; __bss_end__ = . ;
  . = ALIGN(32/8);
  . = ALIGN(32/8);
  __終わり__ = . ;
  _end = .; 提供 (エンド = .);
  . = DATA_SEGMENT_END (.);
  /* デバッグ セクションをスタブします。*/
  .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 デバッグ セクション。
     DWARF デバッグ セクションのシンボルは、先頭に相対的です。
     そのため、0 から開始します。 */
  /* ドワーフ 1 */
  .debug 0 : { *(.debug) }
  .line 0 : { *(.line) }
  /* GNU DWARF 1 拡張機能 */
  .debug_srcinfo 0 : { *(.debug_srcinfo) }
  .debug_sfnames 0 : { *(.debug_sfnames) }
  /* DWARF 1.1 および DWARF 2 */
  .debug_aranges 0 : { *(.debug_aranges) }
  .debug_pubnames 0 : { *(.debug_pubnames) }
  /* ドワーフ 2 */
  .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
  .debug_abbrev 0 : { *(.debug_abbrev) }
  .debug_line 0 : { *(.debug_line) }
  .debug_frame 0 : { *(.debug_frame) }
  .debug_str 0 : { *(.debug_str) }
  .debug_loc 0 : { *(.debug_loc) }
  .debug_macinfo 0 : { *(.debug_macinfo) }
  /* SGI/MIPS DWARF 2 拡張機能 */
  .debug_weaknames 0 : { *(.debug_weaknames) }
  .debug_funcnames 0 : { *(.debug_funcnames) }
  .debug_typenames 0 : { *(.debug_typenames) }
  .debug_varnames 0 : { *(.debug_varnames) }
  /* ドワーフ 3 */
  .debug_pubtypes 0 : { *(.debug_pubtypes) }
  .debug_ranges 0 : { *(.debug_ranges) }
  .gnu.attributes 0 : { 保持 (*(.gnu.attributes)) }
  .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
  /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) }
}


==================================================
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crt1.o を開こうとすると成功しました
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crt1.o
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crti.o を開こうとすると成功しました
/opt/codesourcery/arm-none-linux-gnueabi/libc/usr/lib/crti.o
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/crtbegin.o を開こうとすると成功しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/crtbegin.o
/tmp/ccQTJKJd.o を開こうとして成功しました
/tmp/ccQTJKJd.o
/usr/arm-unknown-linux-gnueabi/usr/lib/libgcc.so を開こうとして失敗しました
/usr/arm-unknown-linux-gnueabi/usr/lib/libgcc.a を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc.so を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc.a を開こうとすると成功しました
/usr/arm-unknown-linux-gnueabi/usr/lib/libgcc_s.so を開こうとして失敗しました
/usr/arm-unknown-linux-gnueabi/usr/lib/libgcc_s.a を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc_s.so を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc_s.a を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/lib/libgcc_s.so を開こうとして失敗しました
/opt/codesourcery/lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/lib/libgcc_s.a を開こうとして失敗しました
/opt/codesourcery/arm-none-linux-gnueabi/libc/lib/libgcc_s.so を開こうとすると成功しました
-lgcc_s (/opt/codesourcery/arm-none-linux-gnueabi/libc/lib/libgcc_s.so)
/usr/arm-unknown-linux-gnueabi/usr/lib/libc.so を開こうとすると成功しました
開いたスクリプト ファイル /usr/arm-unknown-linux-gnueabi/usr/lib/libc.so
開いたスクリプト ファイル /usr/arm-unknown-linux-gnueabi/usr/lib/libc.so
/lib/libc.so.6 を開こうとして成功しました
開いたスクリプト ファイル /lib/libc.so.6
/lib/libc.so.6: ファイルが認識されません: ファイル形式が認識されません
collect2: ld が 1 つの終了ステータスを返しました
4

2 に答える 2

12

クロスコンパイル glibc が間違った方法で構成されています。

-Wl,-verboseリンカーでは次のように述べています。

attempt to open /usr/arm-unknown-linux-gnueabi/usr/lib/libc.so succeeded
opened script file /usr/arm-unknown-linux-gnueabi/usr/lib/libc.so

したがって、-Lオプションを使用して libc.so を開くことができました。しかし、これは実際の.so動的ライブラリではなく、スクリプト (リンカー スクリプト) です。

libc.soテレパシー モード オン: このスクリプトの最後の行は

 GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a  AS_NEEDED ( /lib/ld-linux.so.3 ) )

テレパシーモードオフ

この行にはハードコーディングされた絶対パスが含まれており、リンカを arm-...abi からシステムの libc にリダイレクトし、ほとんどの検索ディレクトリを無視します ( ld.

任意のテキスト エディタでこのファイルを (バックアップを実行して) 編集し、すべて/lib/usr/arm-unknown-linux-gnueabi/lib. (私の優れたクロスコンパイラ環境では、このスクリプトのすべてのパスがプレフィックスに置き換えられています。)

元のスクリプトは、ネイティブ コンパイル、ネイティブ実行で使用する必要がありますが、クロス コンパイルでは使用しないでください。

更新: bytesex はhttp://linux.bytesex.org/cross-compiler.htmlに同じ問題があると言っ/usr/lib/libpthread.soています。このファイルでも置き換えてください。

他のライブラリを確認するfile -skL *.so|grep textには、lib dir で行います。

于 2011-09-20T15:45:20.360 に答える
7

@osgx で説明されているように、gcc はライブラリの間違ったパスを探しています。x86_64 で arm 用のプログラムをクロスコンパイルしようとすると、同様の問題が発生しました。ルート所有のファイルを編集することはオプションではなかったので、さらに検索して--sysrootオプションを発見しました。

--sysroot=dir
ヘッダーとライブラリの論理ルート ディレクトリとして dir を使用します。たとえば、コンパイラが通常、/usr/include でヘッダーを検索し、/usr/lib でライブラリを検索する場合、代わりに dir/usr/include と dir/usr/lib を検索します。

このオプションと -isysroot オプションの両方を使用する場合、 --sysroot オプションはライブラリに適用されますが、 -isysroot オプションはヘッダー ファイルに適用されます。

GNU リンカー (バージョン 2.16 以降) は、このオプションに必要なサポートを備えています。リンカーがこのオプションをサポートしていない場合でも、 --sysroot のヘッダー ファイルの側面は機能しますが、ライブラリの側面は機能しません。

使用例:

./configure --host=arm-unknown-linux-gnueabi \
    CFLAGS='-g -O2 --sysroot=/tmp/rpi-root'
于 2013-05-13T10:04:07.700 に答える