(原)ubuntnu中anaconda的g++提示crtbeginS.o:unrecognized relocation

摘要:
):g++-std=c++11-shared-fPIC-olibXXX.soXXX.cpp之后,会提示下面的错误:/usr/bin/ld:/home/XXX/anaconda2/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/crtbeginS.o:unrecognizedrelocationinsection`.text'/usr/bin/ld:finallinkfailed:Badvaluecollect2:error:ldreturned1exitstatus找了半天,发现解决方式是,直接使用系统自带的g++,而非anaconda中的g++。可以在/usr/bin文件夹内找到对应的gcc和g++)则显示usr/lib/gcc下面的路径。蛋疼后来看了一下之前能成功编译so库的电脑,虽然那台电脑也安装了anaconda,但是g++和gcc都是usr/lib/gcc目录下的。170620更新结束180320更新:今天在使用anaconda并编译caffe时,出现crtbeginS.o:unrecognizedrelocation的错误。

转载请注明出处:

http://www.cnblogs.com/darkknightzh/p/6950263.html

自从使用anaconda后,方便是方便了,也遇到了很多蛋疼的问题。

这次使用anaconda自带的g++编译cpp成so库,供python调用(以前使用ubuntu自带的g++时,正常)。这次输入下面编译命令(说明:使用的代码在另一台电脑上是成功编译的,但是在目前使用的这台电脑上就逗比了。。。):

g++ -std=c++11 -shared -fPIC -o libXXX.so XXX.cpp

之后,会提示下面的错误:

    /usr/bin/ld: /home/XXX/anaconda2/bin/../lib/gcc/x86_64-unknown-linux-gnu/5.4.0/crtbeginS.o:unrecognized relocation(0x2a) in section `.text'
    /usr/bin/ld: final link failed: Bad value 
    collect2: error: ld returned 1 exit status

找了半天,发现解决方式是,直接使用系统自带的g++,而非anaconda中的g++。

如果直接输入g++ -v,显示的是anaconda里面的路径。如果输入g++-4.9,(前提是电脑安装了4.9版本的g++,否则看一下是什么版本,输入对应的版本号。可以在/usr/bin文件夹内找到对应的gcc和g++)则显示usr/lib/gcc下面的路径。因而,终端中输入:

g++-4.9 -std=c++11 -shared -fPIC -o libXXX.so XXX.cpp

成功的编译出so库来了。。。蛋疼

后来看了一下之前能成功编译so库的电脑,虽然那台电脑也安装了anaconda,但是g++和gcc都是usr/lib/gcc目录下的。出问题的电脑,不清楚怎么设置的,g++和gcc默认的变成了anaconda里面的了。。。哎

=============================================================================================

170620更新:

上面是直接在终端中输入的,如果使用cmake的话,稍微麻烦一点(在编译opencv时,由于电脑上装了anaconda,因而默认总使用anaconda的C++,然后就提示上面的问题)。

使用cmake的话,可以使用CMAKE_C_COMPILERCMAKE_CXX_COMPILER这两个来设定使用的c及c++编译器http://blog.csdn.net/10km/article/details/50444715),如下(代码不全,具体参考 http://www.cnblogs.com/darkknightzh/p/5638117.html):

cmake -D CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/g++-4.9 -D CMAKE_C_COMPILER:FILEPATH=/usr/bin/gcc-4.9

使用上述命令后,编译opencv成功了。折腾人啊。。。

170620更新结束

180320更新:

今天在使用anaconda并编译caffe时,出现crtbeginS.o:unrecognized relocation的错误。解决方法吐下:

1. 修改makefile文件

直接在Makefile最开始增加下面一句话:

CXX := /usr/bin/g++-4.9

之后在终端中直接使用官方的编译命令即可:

make CUDA_HOME=/usr/local/cuda-8.0

方法2:输入make时增加CXX标志位

https://www.cnblogs.com/sky-heaven/p/6272408.html中指出:

= 是最基本的赋值

:= 是覆盖之前的值

?= 是如果没有被赋值过就赋予等号后面的值

+= 是添加等号后面的值

因而考虑直接添加CXX的标志,如下:

make CXX=/usr/bin/g++-4.9 CUDA_HOME=/usr/local/cuda-8.0

弱弱的说一下,终端中输入下面的命令,也可以:

make CXX?=/usr/bin/g++-4.9 CUDA_HOME=/usr/local/cuda-8.0

如果要使用nccl,如https://www.cnblogs.com/haiyang21/p/7183413.html中所说,需要Makefile.config中取消注释USE_NCCL := 1,并将NCCL的include和lib路径增加到Makefile.config中,具体如下:

USE_NCCL := 1
INCLUDE_DIRS += /path/nccl/build/include
LIBRARY_DIRS += /path/nccl/build/lib

但如果使用的是anaconda,可能会提示找不到某个库。。。后来决定不使用nccl了,因而没有继续深入查找原因。见谅。

安装nccl及可能碰到的问题见:

http://www.cnblogs.com/darkknightzh/p/5717234.html

http://www.cnblogs.com/darkknightzh/p/6950263.html

180320更新结束

=============================================================================================

免责声明:文章转载自《(原)ubuntnu中anaconda的g++提示crtbeginS.o:unrecognized relocation》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇合泰内建函数Docker mysql主从配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac OSX上卸载Anaconda

方案一 anaconda安装程序在~/.bash_profile脚本中新添加了一行,将anaconda bin目录添加到了$PATH环境变量中。所以你只需要删除anaconda目录,但是最好也从安装脚本中删除此行。 方案二 要卸载Anaconda,先打开终端窗口并删除整个anaconda安装目录:rm -rf〜/ anaconda。然后要编辑〜/ .bas...

MacBookPro磁盘空间不够

256G的SSD还是快被占满了,剩余12G,本来一切运行正常。 要往U盘里拷点资料,突然电脑就罢工了,cleanMyMac 显示磁盘容量剩余 1.8G。 finder 罢工,无法重启,无法强退。 无法拷贝,无法删除文稿,无法删除应用,无法清空废纸篓。 用CleanMyMAC 卸载应用无效。 按照系统提示清理空间,资源浏览器中的内容无法删除(估计底层还是调用...

eclipse 优化提速

1、windows–>perferences–>general–>startup and shutdown关掉没用的启动项: WTP :一个跟myeclipse差不多的东西,主要差别是 WTP 是免费的,如果使用myeclipse,这个可以取消 Mylyn:组队任务管理工具,类似于 CVS ,以任务为单位管理项目进度,没用到的可以取消 D...

windows2008 32位 sp2安装蓝牙驱动+蓝牙鼠标thinkpad sl410k 2842esc

1、驱动之家下载驱动:http://drivers.mydrivers.com/drivers/431-172563-Broadcom-Bluetooth-7.0-For-WinXP-32-WinX/。 2、下载Microsoft_BlueTooth_Stack。 3、双击broadcom_bluetooth_v7文件夹内的win32文件夹,双击Inst.e...

Charles抓包配置、常见问题和解决方法

1、下载安装charles,官方下载地址:https://www.charlesproxy.com/download/ 如图,下载所对应系统需要的相应版本即可。 2、解压Charles包,双击Charles 64位_4.2.7.4.msi 进行安装。安装的路径自己进行选择,这里不做详细介绍,就直接按照提示一步步安装。 3、安装完成之后,打开你安装的路径:...

adb命令——简单常用命令介绍:将文件从手机上传输到电脑里:adb pull /sdcard/123.png c:usersdeldesktop

adb pull <手机路径>   <本机路径>  从手机中拉取信息到本地电脑上             示例:adb    pull      /sdcard/123.png       c:usersdeldesktop ------------------------------------------------------...