跑步时
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-时间工具=/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
GNU 汇编器版本 2.19.51 (arm-none-linux-gnueabi) 使用 BFD 版本 (Sourcery G++ Lite 2010q1-202) 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 --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /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-littlearm", "elf32-bigarm",
“elf32-littlearm”)
OUTPUT_ARCH(臂)
条目(_开始)
SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
部分
{
/* 只读部分,合并到文本段中: */
提供(__executable_start = SEGMENT_START(“文本段”,0x00008000));. = SEGMENT_START("文本段", 0x00008000) + 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.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 { 保持 (*(.eh_frame)) }
.gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) }
/* 调整数据段的地址。我们想调整到
同上一页内页地址。*/
. =对齐(常量(MAXPAGESIZE))-((常量(MAXPAGESIZE)-。)&(常量(MAXPAGESIZE)-1));. = DATA_SEGMENT_ALIGN(常量(MAXPAGESIZE),常量(COMMONPAGESIZE));
/* 异常处理 */
.eh_frame : ONLY_IF_RW { 保持 (*(.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 = .);
保持 (*(.preinit_array))
PROVIDE_HIDDEN (__preinit_array_end = .);
}
.init_array :
{
PROVIDE_HIDDEN (__init_array_start = .);
保持 (*(SORT(.init_array.*)))
保持 (*(.init_array))
PROVIDE_HIDDEN (__init_array_end = .);
}
.fini_array :
{
PROVIDE_HIDDEN (__fini_array_start = .);
保持 (*(SORT(.fini_array.*)))
保持 (*(.fini_array))
PROVIDE_HIDDEN (__fini_array_end = .);
}
.ctors:
{
/* gcc 使用 crtbegin.o 查找开始
构造函数,所以我们确保它是
第一的。因为这是一个通配符,所以它
如果用户不这样做也没关系
实际上链接到 crtbegin.o;这
链接器不会寻找匹配的文件
通配符。通配符也意味着它
哪个目录 crtbegin.o 无关紧要
在。 */
保持 (*crtbegin.o(.ctors))
保持 (*crtbegin?.o(.ctors))
/* 我们不想包含 .ctor 部分
crtend.o 文件直到排序的ctors之后。
crtend 文件中的 .ctor 部分包含
ctors 标记的结尾,它必须是最后一个 */
保持 (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
保持 (*(SORT(.ctors.*)))
保持 (*(.ctors))
}
.dtors:
{
保持 (*crtbegin.o(.dtors))
保持 (*crtbegin?.o(.dtors))
保持 (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
保持 (*(排序(.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) }
_eddata = .; 提供(数据=。);
__bss_start = .;
__bss_start__ = .;
.bss:
{
*(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*)
*(常见的)
/* 在这里对齐以确保 .bss 部分占用空间最多
_结尾。在 .bss 之后对齐以确保正确对齐,即使
.bss 部分消失,因为没有输入部分。
FIXME:我们为什么需要它?当没有 .bss 部分时,我们不会
填充 .data 部分。*/
. =对齐(。!= 0?32 / 8:1);
}
_bss_end__ = . ; __bss_end__ = 。;
. =对齐(32 / 8);
. =对齐(32 / 8);
__end__ = . ;
_end = .; 提供(结束=。);
. = DATA_SEGMENT_END (.);
/* Stabs 调试部分。*/
.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 : { 保持 (*(.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 个退出状态