ubuntu 下 python 调用 c++ 错误问题解决

ImportError:
/home/whut/anaconda2/bin/…/lib/libgomp.so.1: version GOMP_4.0' not found libstdc++.so.6: versionGLIBCXX_3.4.21’ not found

首先查看一下是否真的不存在
strings /home/whut/anaconda2/bin/…/lib/libgomp.so.1 | grep GOMP

GOMP_barrier
GOMP_critical_start
GOMP_critical_end
GOMP_critical_name_start
GOMP_critical_name_end
GOMP_atomic_start
GOMP_atomic_end
GOMP_loop_static_start
GOMP_loop_dynamic_start
GOMP_loop_guided_start
GOMP_loop_runtime_start
GOMP_loop_ordered_static_start
GOMP_loop_ordered_dynamic_start
GOMP_loop_ordered_guided_start
GOMP_loop_ordered_runtime_start
GOMP_loop_static_next
GOMP_loop_dynamic_next
GOMP_loop_guided_next
GOMP_loop_runtime_next
GOMP_loop_ordered_static_next
GOMP_loop_ordered_dynamic_next
GOMP_loop_ordered_guided_next
GOMP_loop_ordered_runtime_next
GOMP_parallel_loop_static_start
GOMP_parallel_loop_dynamic_start
GOMP_parallel_loop_guided_start
GOMP_parallel_loop_runtime_start
GOMP_loop_end
GOMP_loop_end_nowait
GOMP_loop_ull_static_start
GOMP_loop_ull_dynamic_start
GOMP_loop_ull_guided_start
GOMP_loop_ull_runtime_start
GOMP_loop_ull_ordered_static_start
GOMP_loop_ull_ordered_dynamic_start
GOMP_loop_ull_ordered_guided_start
GOMP_loop_ull_ordered_runtime_start
GOMP_loop_ull_static_next
GOMP_loop_ull_dynamic_next
GOMP_loop_ull_guided_next
GOMP_loop_ull_runtime_next
GOMP_loop_ull_ordered_static_next
GOMP_loop_ull_ordered_dynamic_next
GOMP_loop_ull_ordered_guided_next
GOMP_loop_ull_ordered_runtime_next
GOMP_ordered_start
GOMP_ordered_end
GOMP_parallel_start
GOMP_parallel_end
GOMP_sections_start
GOMP_sections_next
GOMP_parallel_sections_start
GOMP_sections_end
GOMP_sections_end_nowait
GOMP_single_start
GOMP_single_copy_start
GOMP_single_copy_end
GOMP_task
GOMP_taskwait
GOMP_taskyield
GOMP_1.0
GOMP_2.0
GOMP_3.0
GOMP_CPU_AFFINITY
GOMP_SPINCOUNT
GOMP_STACKSIZE
not enough memory to store GOMP_CPU_AFFINITY list

在全系统搜索libgomp.so,找到由GOMP_4.0的,替换之。

cp /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0 /home/whut/anaconda2/lib
rm -f libgomp.so.1
ln -s libgomp.so.1.0.0 libgomp.so.1

使用gcc 5 编译c++11编写的程序 出现的符号找不到的链接问题。

  • 使用c++11 写了一段c++程序,使用gcc 5.2编译。程序引用了非c++11编写的静态库

  • 链接时总是报某个函数找不到 但是使用nm命令查看,符号确实存在,

  • 如报undefined reference to cv::imreade();

  • 经过google发现,原来gcc 5引入了新的ABI
    https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
    If you get linker errors about undefined references to symbols that involve types in the std::__cxx11 namespace or the tag [abi:cxx11] then it probably indicates that you are trying to link together object files that were compiled with different values for the _GLIBCXX_USE_CXX11_ABI macro. This commonly happens when linking to a third-party library that was compiled with an older version of GCC. If the third-party library cannot be rebuilt with the new ABI then you will need to recompile your code with the old ABI.

  • 在参数上增加 -D_GLIBCXX_USE_CXX11_ABI=0 就解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值