使用已安装的GCC-4.5.3时出现编译错误(ld:找不到libmvec_nonshared.a,libmvec.so.1). [英] Compilation error (ld: cannot find libmvec_nonshared.a,libmvec.so.1) while using Installed GCC-4.5.3

查看:952
本文介绍了使用已安装的GCC-4.5.3时出现编译错误(ld:找不到libmvec_nonshared.a,libmvec.so.1).的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从GCC 4.6版开始,无法使用GCC-4.8.5打印回溯或stackdump,默认设​​置已更改为-fomit-frame-pointer.通过使用--enable-frame-pointer configure选项配置GCC,可以将默认值还原为-fno-omit-frame-pointer.因此,我使用下面的配置选项在自己的主目录中安装了GCC-4.5.3.

配置选项:

 <代码> ../gcc-4.5.3/configure -v --prefix =/home/GCC1-4.5.3/usr --infodir =/home/GCC1-4.5.3/usr/build/share/info --mandir =/home/GCC1-4.5.3/usr/build/share/man --libdir =/home/GCC1-4.5.3/usr/build/lib64 --libexecdir =/home/GCC1-4.5.3/usr/build/lib64-启用语言= c,c ++,objc,fortran,obj-c ++,java --with-gxx-include-dir =/home/GCC1-4.5.3/usr/build/包括--enable-ssp --enable-frame-pointer --disable-libssp --disable-plugin --with-bugurl = http://bugs.opensuse.org/--with-pkgversion ='SUSE Linux'--disable-libgcj --disable-libmudflap --with-slibdir =/home/GCC1-4.5.3/usr/build/lib64 --enable -__ cxa_atexit --enable-libstdcxx-allocator = new --disable-libstdcxx-pch--enable-version-specific-runtime-libs --enable-linker-build-id --enable-linux-futex --program-suffix = -4.5.3 --without-system-libunwind --with-arch-32 = i686 --with-tune =通用--build = x86_64-suse-linux --host = x86_64-suse-linux 

在包含我安装的 GCC 编译器之前,我的 Makefile.common 如下所示:

  CROSS_COMPILER_PREFIX = x86_64-dx-linux-gnuADDR2LINE = $(CROSS_COMPILER_PREFIX)-addr2lineAR = $(CROSS_COMPILER_PREFIX)-arAS = $(CROSS_COMPILER_PREFIX)-CXX = $(CROSS_COMPILER_PREFIX)-c ++CXXFILT = $(CROSS_COMPILER_PREFIX)-c ++过滤CPP = $(CROSS_COMPILER_PREFIX)-cppGXX = $(CROSS_COMPILER_PREFIX)-g ++GCC = $(CROSS_COMPILER_PREFIX)-gccGCCBUG = $(CROSS_COMPILER_PREFIX)-gccbugGCOV = $(CROSS_COMPILER_PREFIX)-gcovLD = $(CROSS_COMPILER_PREFIX)-ld 

安装后,我将编译器包含在Makefile.common中,如下所示:

  CROSS_COMPILER_PREFIX = x86_64-dx-linux-gnu(GCC-4.8.5前缀)CROSS_COMPILER_PREFIX = x86_64-suse-linux(我安装的GCC-4.5.3前缀)ADDR2LINE = $(CROSS_COMPILER_PREFIX)-addr2lineCXX = $(CROSS_COMPILER_PREFIX)-c ++-4.5.3CXXFILT = $(CROSS_COMPILER_PREFIX)-c ++过滤CPP = $(CROSS_COMPILER_PREFIX)-cpp-4.5.3GXX = $(CROSS_COMPILER_PREFIX)-g ++-4.5.3GCC = $(CROSS_COMPILER_PREFIX)-gcc-4.5.3GCCBUG = $(CROSS_COMPILER_PREFIX)-gccbugGCOV = $(CROSS_COMPILER_PREFIX)-gcov-4.5.3LD = $(CROSS_COMPILER_PREFIX)-ld 

包括当我尝试发出make命令后,它失败并显示以下错误

 /usr/bin/ld:找不到/usr/lib64/libmvec_nonshared.a/usr/bin/ld:找不到/lib64/libmvec.so.1collect2:ld返回1退出状态 

我还观察到这两个库都存在于另一个路径中,而不存在于上述(/usr/lib64/,/lib64)路径中.我没有运行sudo命令或创建链接或对/usr/路径进行任何更改的权限.下面是我运行ld -lmvec --verbose时的输出.

 试图打开/usr/x86_64-suse-linux/lib64/libmvec.so失败尝试打开/usr/x86_64-suse-linux/lib64/libmvec.a失败尝试打开/usr/lib64/libmvec.so失败ld:找不到-lmvec 

注意:

在GCC_4.8.5上制作成功,而在我安装的GCC_4.5.3.上制作失败.

任何人都可以帮助我解决此问题吗?我是否需要更改Makefile.common中的任何内容?为什么在GCC_4.8.5上制作成功,而在GCC_4.5.3上制作失败?

如何在Makefile中进行更改以在库当前路径中进行ld搜索?

除了此查询外,任何人都可以帮助我检查是否省略了帧指针吗?

预先感谢.

解决方案

如果要编译gcc,请尝试使用--with-glibc-version = xxx.我使用自己的工具链,在其中添加了gcc编译器中指定的glibc版本,以解决该问题.

Unable to print traceback or stackdump using GCC-4.8.5 as starting with GCC version 4.6, the default setting has been changed to -fomit-frame-pointer. Read in the internet like the default can be reverted to -fno-omit-frame-pointer by configuring GCC with the --enable-frame-pointer configure option. So I installed GCC-4.5.3 in my home directory with below configure options.

Configure options:

../gcc-4.5.3/configure -v --prefix=/home/GCC1-4.5.3/usr --infodir=/home/GCC1-4.5.3/usr/build/share/info --mandir=/home/GCC1-4.5.3/usr/build/share/man --libdir=/home/GCC1-4.5.3/usr/build/lib64 --libexecdir=/home/GCC1-4.5.3/usr/build/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java --with-gxx-include-dir=/home/GCC1-4.5.3/usr/build/include --enable-ssp --enable-frame-pointer --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/home/GCC1-4.5.3/usr/build/lib64 --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --enable-linker-build-id --enable-linux-futex --program-suffix=-4.5.3 --without-system-libunwind --with-arch-32=i686 --with-tune=generic --build=x86_64-suse-linux --host=x86_64-suse-linux

Before including my installed GCC compiler my Makefile.common looks as below:

CROSS_COMPILER_PREFIX = x86_64-dx-linux-gnu
ADDR2LINE = $(CROSS_COMPILER_PREFIX)-addr2line
AR        = $(CROSS_COMPILER_PREFIX)-ar
AS        = $(CROSS_COMPILER_PREFIX)-as
CXX       = $(CROSS_COMPILER_PREFIX)-c++
CXXFILT   = $(CROSS_COMPILER_PREFIX)-c++filt
CPP       = $(CROSS_COMPILER_PREFIX)-cpp
GXX       = $(CROSS_COMPILER_PREFIX)-g++
GCC       = $(CROSS_COMPILER_PREFIX)-gcc
GCCBUG    = $(CROSS_COMPILER_PREFIX)-gccbug
GCOV      = $(CROSS_COMPILER_PREFIX)-gcov
LD        = $(CROSS_COMPILER_PREFIX)-ld

After installing, I have included the compiler in my Makefile.common as below:

CROSS_COMPILER_PREFIX = x86_64-dx-linux-gnu (GCC-4.8.5 Prefix)
CROSS_COMPILER_PREFIX = x86_64-suse-linux(My installed GCC-4.5.3 Prefix) 
ADDR2LINE = $(CROSS_COMPILER_PREFIX)-addr2line
CXX       = $(CROSS_COMPILER_PREFIX)-c++-4.5.3
CXXFILT   = $(CROSS_COMPILER_PREFIX)-c++filt
CPP       = $(CROSS_COMPILER_PREFIX)-cpp-4.5.3
GXX       = $(CROSS_COMPILER_PREFIX)-g++-4.5.3
GCC       = $(CROSS_COMPILER_PREFIX)-gcc-4.5.3
GCCBUG    = $(CROSS_COMPILER_PREFIX)-gccbug
GCOV      = $(CROSS_COMPILER_PREFIX)-gcov-4.5.3
LD        = $(CROSS_COMPILER_PREFIX)-ld

After including when I try to give make command it fails with below error

/usr/bin/ld: cannot find /usr/lib64/libmvec_nonshared.a
/usr/bin/ld: cannot find /lib64/libmvec.so.1
collect2: ld returned 1 exit status

Also I observed that these both libraries are present in another path and not present in the above mentioned (/usr/lib64/, /lib64) path. I don't have permissions to run sudo command or to create link or make any changes in /usr/ path. The below is the output when I run ld -lmvec --verbose.

attempt to open /usr/x86_64-suse-linux/lib64/libmvec.so failed
attempt to open /usr/x86_64-suse-linux/lib64/libmvec.a failed
attempt to open /usr/lib64/libmvec.so failed
ld: cannot find -lmvec

Note:

The make is successfull with GCC_4.8.5 where as the make is failing with my installed GCC_4.5.3.

Can anyone please help me to resolve this issue? Do I need to change anything in Makefile.common? why the make is successfull with GCC_4.8.5 and it is failing for GCC_4.5.3 ?

How to make changes in Makefile to make ld search in the library present path ?

In addition to this query can any one pls help me to check whether frame-pointer is omitted or not?

Thanks in Advance.

解决方案

If you are compiling gcc try with --with-glibc-version=xxx. I use my own toolchain where I added glibc version specified in gcc compiler which solve the problem.

这篇关于使用已安装的GCC-4.5.3时出现编译错误(ld:找不到libmvec_nonshared.a,libmvec.so.1).的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆