2016-03-03 54 views
-1

我运行的是OpenSUSE 13.2,由于各种原因,我正在开发的一个项目需要OpenMPI与libc++而不是libstd++链接。将OpenMPI与libC++联系起来

我已经尝试设置以下的环境变量:

CXX <path>/llvm-3.8/bin/clang++ 
CC <path>/llvm-3.8/bin/clang 
OMPI_CC <path>/llvm-3.8/bin/clang 
OMPI_CXX <path>/llvm-3.8/bin/clang++ 

不过,虽然这并编译使用铛,它仍链接到libstdc++证实从下面的命令对在了openmpi bin文件夹了各种可执行程序运行:

openmpi-1.10.2/bin > ldd vtc++ 
     linux-vdso.so.1 (0x00007ffc9f0ed000) 
     libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007ffb1f2cd000) 
     libm.so.6 => /lib64/libm.so.6 (0x00007ffb1efcb000) 
     libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007ffb1edb4000) 
     libc.so.6 => /lib64/libc.so.6 (0x00007ffb1ea0d000) 
     /lib64/ld-linux-x86-64.so.2 (0x00007ffb1f611000) 

和:

openmpi-1.10.2/bin > objdump -x vtc++ | grep NEEDED 
    NEEDED    libstdc++.so.6 
    NEEDED    libm.so.6 
    NEEDED    libgcc_s.so.1 
    NEEDED    libc.so.6 

任何建议非常感谢。

+0

有一个'-stdlib = ...'参数需要通过。 – Mat

+0

我的意思是OpenMPI库本身需要针对libC++构建,而不是我使用OpenMPI编写的程序? – Samidamaru

+0

所有东西都需要使用相同的标准库(包括所有静态和共享库)来构建,否则您会遇到未定义的行为,并且非常难以调试问题(遍及整个地方的ODR违规) – Mat

回答

0

感谢@Zulan和@Mat的帮助。

我的问题是,虽然我设置了正确的编译器,但我还没有通过-stdlib=c++标志。要使用OpenMPI版本(特别是使用configure)执行此操作,必须将CFLAGSCXXFLAGS环境变量设置为包含-stdlib=libc++。我通过一个模块文件prepend-path来完成。