2016-03-03 5 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 бен :

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, вы должны установить переменные окружения CFLAGS и CXXFLAGS, чтобы они содержали -stdlib=libc++. Я сделал это через файл модуля с prepend-path.

Смежные вопросы