arm-linux-gcc的连接问题

qihuanfengyun 2010-03-01 06:15:27
实际机器上的终端的错误输出:
……
arm-linux-gcc -shared .libs/bitmath.o .libs/bitreader.o .libs/bitwriter.o .libs/cpu.o .libs/crc.o .libs/fixed.o .libs/float.o .libs/format.o .libs/lpc.o .libs/md5.o .libs/memory.o .libs/metadata_iterators.o .libs/metadata_object.o .libs/stream_decoder.o .libs/stream_encoder.o .libs/stream_encoder_framing.o .libs/window.o .libs/ogg_decoder_aspect.o .libs/ogg_encoder_aspect.o .libs/ogg_helper.o .libs/ogg_mapping.o -lm -L/data/flac-output/lib -logg -Wl,-soname -Wl,libFLAC.so.8 -o .libs/libFLAC.so.8.2.0
/opt/OXNAS810/toolchain/gcc-4.2.4-glibc-2.7-toolchain/cross-tools/lib/gcc/arm-unknown-linux-gnueabi/4.2.4/../../../../arm-unknown-linux-gnueabi/bin/ld: cannot find -logg
collect2: ld returned 1 exit status
make[1]: *** [libFLAC.la] Error 1
make[1]: Leaving directory `/root/tt/minidlna/flac-1.2.1/src/libFLAC'
make: *** [all-recursive] Error 1

通过ssh连接的虚拟终端的输出:
……
arm-linux-gcc -shared .libs/bitmath.o .libs/bitreader.o .libs/bitwriter.o .libs/cpu.o .libs/crc.o .libs/fixed.o .libs/float.o .libs/format.o .libs/lpc.o .libs/md5.o .libs/memory.o .libs/metadata_iterators.o .libs/metadata_object.o .libs/stream_decoder.o .libs/stream_encoder.o .libs/stream_encoder_framing.o .libs/window.o .libs/ogg_decoder_aspect.o .libs/ogg_encoder_aspect.o .libs/ogg_helper.o .libs/ogg_mapping.o -lm -L/data/flac-output/lib -logg -Wl,-soname -Wl,libFLAC.so.8 -o .libs/libFLAC.so.8.2.0
../../libtool: line 4361: arm-linux-gcc: command not found
make[1]: *** [libFLAC.la] Error 127
make[1]: Leaving directory `/root/tt/minidlna/flac-1.2.1/src/libFLAC'
make: *** [all-recursive] Error 1

貌似提示找不到连接器ld 我想知道它去实际路径的什么地方找连接器ld
另外我的交叉编译工具目录中有arm-linux-ld连接文件连接到本目录的一个文件。在其他目录下还有ld。
我想知道gcc的连接器ld和实际用的ld有什么区别吗?
他们是怎么工作的?
...全文
854 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
qihuanfengyun 2010-03-04
  • 打赏
  • 举报
回复
gcc默认搜索的头文件目录是gcc安装的目录下的几个相关目录,我们可以通过命令行指定或环境变量改变gcc的搜索目录。

那些被包含的头文件应该是gcc安装是自带的,不是系统的。
qihuanfengyun 2010-03-03
  • 打赏
  • 举报
回复
实际在linux上有两个连接器
一个标准连接器ld是安装Binutils的时候安装的。安装时可以在编译时指定ld的库文件搜索路径,不过ld大多配合连接脚本使用,也可以在脚本中指定库文件的搜索路径,ld主要真对linux的静态连接。

还有一个动态连接器是在我的系统上是/lib/ld-linux.so.2这是安装glibc的时候生成的,它是动态连接器。就是将程序加载到内存后开始正式执行前才连接。还有/etc/ld.so.conf文件的配置也是真对动态连接的。

gcc在安装时会自动搜索标准连接器和汇编器。如果系统有多个或没有就需要--with-as=pathname
--with-ld=pathname 这两个选项指定。

至于gcc与动态连接器是gcc会把动态连接器的路径包含到每个可执行文件中,可以通过修改gcc的specs文件更改嵌入到elf文件中的动态库的路径。

至于gcc是按什么默认规则搜索头文件,以及怎么修改个人感觉会在gcc specs文件中是gcc编译安装的时候写进去的。

目前还没办法查证。
leecoco123 2010-03-02
  • 打赏
  • 举报
回复
我也想知道gcc的连接器ld和实际用的ld有什么区别,技术性的帮不了,就帮忙顶起来吧,呵呵
qihuanfengyun 2010-03-02
  • 打赏
  • 举报
回复
我现在知道在虚拟终端由于没有添加环境变量导致没有办法使用 arm-linux-gcc 命令。

但在实际机器的终端上的/opt/OXNAS810/toolchain/gcc-4.2.4-glibc-2.7-toolchain/cross-tools/lib/gcc/arm-unknown-linux-gnueabi/4.2.4/../../../../arm-unknown-linux-gnueabi/bin/ld

这个ld的绝对路径是什么啊? 为什么有这么多 ../ 这东西啊?
FoxMessire 2010-03-02
  • 打赏
  • 举报
回复
不明白,麻烦楼主详细解释一下
谭海燕 2010-03-02
  • 打赏
  • 举报
回复
而且路径都是设定好了 的
谭海燕 2010-03-02
  • 打赏
  • 举报
回复


其实它默认缺省情况下就已经指定了ld
qihuanfengyun 2010-03-02
  • 打赏
  • 举报
回复
gcc编译器怎么在编译完成之后调用连接器进行链接啊!

它怎么知道去哪找ld啊?
谭海燕 2010-03-02
  • 打赏
  • 举报
回复


汗。。。

一般都是这么现实的。

你看的时候,把那几个../都省略了就可以了。
谭海燕 2010-03-02
  • 打赏
  • 举报
回复


汗。。。

一般都是这么现实的。

你看的时候,把那几个../都省略了就可以了。
qihuanfengyun 2010-03-02
  • 打赏
  • 举报
回复
/opt/OXNAS810/toolchain/gcc-4.2.4-glibc-2.7-toolchain/cross-tools/lib/gcc/arm-unknown-linux-gnueabi/4.2.4/../../../../arm-unknown-linux-gnueabi/bin/ld

这里显示路径为什么不直接显示成/opt/OXNAS810/toolchain/gcc-4.2.4-glibc-2.7-toolchain/cross-tools/arm-unknown-linux-gnueabi/bin/ld

而是加入几个 ../ 呢?
qihuanfengyun 2010-03-02
  • 打赏
  • 举报
回复
我的问题是:
连接器根据什么查找要包含的库文件
默认的路径是什么记录在哪里怎么创建的及怎么修改;

默认的gcc包含头文件的查找路径是什么 记录在哪里 什么时候创建的怎么创建的(在安装GCC的时候还是其他什么时候) 怎么修改。

gcc编译器和ld连接器的关系。 以及它们与glibc库的关系。
qihuanfengyun 2010-03-02
  • 打赏
  • 举报
回复
我的问题解决了。是因为缺少动态库文件。
qihuanfengyun 2010-03-01
  • 打赏
  • 举报
回复
最好能说一下可执行文件的连接过程怎么完成的?
qihuanfengyun 2010-03-01
  • 打赏
  • 举报
回复
连接器ld一个不就够了吗,怎么弄这么多。多麻烦啊!!!

23,114

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧