转载请注明出处:

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

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

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

g++ -std=c++ -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++ -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_COMPILER及CMAKE_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的更多相关文章

  1. C++primer原书中的一个错误(派生类using声明对基类权限的影响)

    在C++primer 第4版的 15章 15.2.5中有以下这样一段提示: "注解:派生类能够恢复继承成员的訪问级别,但不能使訪问级别比基类中原来指定的更严格或者更宽松." 在vs ...

  2. Java原子类中CAS的底层实现

    Java原子类中CAS的底层实现 从Java到c++到汇编, 深入讲解cas的底层原理. 介绍原理前, 先来一个Demo 以AtomicBoolean类为例.先来一个调用cas的demo. 主线程在f ...

  3. 在Windows7中打开照片,提示“Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足。....”

    在Windows7中打开照片,提示"Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足.请关闭一些目前没有使用的程序或者释放部分硬盘空间(如果硬盘几乎已满),然后重试. ...

  4. SQLSERVER中如何忽略索引提示

    SQLSERVER中如何忽略索引提示 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引, ...

  5. java eclipse中的代码联动提示功能

    eclipse中的代码联动提示设置:window--->preferences--->java--->editor----> content assist的auto activ ...

  6. Access 中数据库操作时提示from子句语法错误

    问题:如果在Access 中数据库操作时提示from子句语法错误原因:语句中某一单词为Access中的关键字.如:select * from user.其中user就是一关键字.解决:用中括号[]将其 ...

  7. KSImageNamed-Xcode-master 对项目中图片提供自动提示功能的插件

    .使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示.  下载地址:http://yun.baidu.com/s/1qWNkvGK  

  8. 在Eclipse中制作SSH配置文件提示插件

    原文地址:http://blog.csdn.net/longyuhome/article/details/8968093 这篇博客算是对原先的“在Eclipse中制作和使用struts2配置文件提示插 ...

  9. 你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ?

    你知道为什么Xcode6中Swift没有智能提示和自己主动补全功能吗 ? 长沙戴维营教育将为你解开这个巨大的谜团大BUG! http://www.ubuntucollege.cn/course/29/ ...

随机推荐

  1. vRealize Automation的REST API Reference在哪里可以看到?

    两个地方: 1. VMware官网可以查看. http://pubs.vmware.com/vrealize-automation-71/topic/com.vmware.vra.restapi.do ...

  2. 算法-强连通分量和Kosaraju算法

    有向图中,连通性比较好理解,如果两个顶点V和顶点W是可达的,可以称之为强连通的,即存在路径A→B,同时也存在一条有向路径B→A.从之前的有向环的判定过程中其实我们可以得到一个结论就是两个是强连通的当且 ...

  3. SpringBoot整合Quartz定时任务 的简单实例 2

    (1)什么是Quartz?(2)Quartz的特点:(3)Quartz专用词汇说明:(4)Quartz任务调度基本实现原理: 接下来看下具体的内容: (1)什么是Quartz? Quartz是一个完全 ...

  4. Backbone.js 中使用 Model

    前面几篇 Backbone.js 的例子中有使用到 template, 及数据的填充,其实这已经很接近 Model 了.现在来学习怎么创建自己的 Model 类,并简单的使用.Backbone.js ...

  5. Spark 以及 spark streaming 核心原理及实践

    收录待用,修改转载已取得腾讯云授权 作者 | 蒋专 蒋专,现CDG事业群社交与效果广告部微信广告中心业务逻辑组员工,负责广告系统后台开发,2012年上海同济大学软件学院本科毕业,曾在百度凤巢工作三年, ...

  6. Linux下简单线程池的实现

    大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的.在传统的多线程服务器模型中是这样实现的:一旦有个服务请求到达,就创建一个新的服务 ...

  7. Eclipse技术: 项目文件中过滤.o文件

    1. 右建项目 -> Properties. 2. 增加过滤规则

  8. mac 苹果鼠标 magic mouse2 当触摸代替点击当触摸板教程

    本文解决 mac 苹果鼠标 magic mouse2 触摸代替点击,鼠标当触摸板教程 买了magic mouse2之后,发现官方不推荐使用触摸代替点击,我感觉很不爽,这不就是一个触摸板嘛,于是各种搜软 ...

  9. 未能加载文件或程序集“Microsoft.SqlServer.Sqm, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91”或它的某一个依赖项。系统找不到指定的文件。 (SqlMgmt)

    解决方法: Copy this file "Microsoft.SqlServer.Sqm.dll" in the forder "C:/Program Files/Mi ...

  10. POI中setDefaultColumnWidth方法不起作用的原因

    sheet.setDefaultRowHeight((short) (2 * 256)); //设置默认行高,表示2个字符的高度 sheet.setDefaultColumnWidth(17);   ...