У меня есть проект, который скомпилирован с помощью autotools и до этой недели должен быть только скомпилирован с поддержкой OpenMP и MPI. Теперь я добавил ядро CUDA, которое я хочу скомпилировать в код при определенных обстоятельствах. Компиляция кода идет хорошо, и все объектные файлы создаются. Когда речь идет о компоновке объектов в исполняемый файл используется следующая команда:Проблемы с Autotools при связывании с OpenMP, MPI и CUDA
/бен/Баш ../libtool --tag = CXX --mode = ссылка NVCC -ccbin = mpicxx -I/USR/local/cuda/include -Xcompiler -std = C++ 0x -Xcompiler -fopenmp -L/usr/local/cuda/lib64 -lcuda -lcudart -lcufft -o utrplauncher utrplauncher-UTRP.o crossovers/libcrossovers.a Инициализаторы/libinitialisers . мутаторы/проблема libmutators.a/libproblem.a общего/libcommon.a переменных/libvariables.a ../libraries/framework/libmoeaframework.a ../libraries/ticpp/libticpp.a
Который в turn генерирует следующую команду связи
libtool: ссылка: nvcc -ccbin = mpicxx -I/usr/local/cuda/include -std = C++ 0x -fopenmp -o utrplauncher utrplauncher-UTRP.o -L/usr/local/cuda/lib64 -lcuda -lcudart -lcufft crossovers/libcrossovers.a initialisers/libinitialisers.a mutators/libmutators.a problem/libproblem.a common/libcommon.a variables/libvariables.a ../libraries/framework/libmoeaframework.a ../libraries /ticpp/libticpp.a
этого генерирует следующее сообщение об ошибке, потому что -std = C++ 0x и -fopenmp интерпретируются компилятором CUDA и не mpicxx компилятор.
nvcc fatal : Value 'c++0x' is not defined for option 'std'
Я могу опубликовать свой файл configure.ac, если это поможет, но хотелось бы, чтобы на данный момент вопрос был кратким.
Вопрос в том, можно ли пересылать флаги -Xcompiler в компилятор mpicxx, а не лишать их libtool?
Приведенные выше работы при связывании, однако, приводят к ошибке при компиляции объектных файлов, поскольку nvcc не распознает параметр -Wc. Есть ли способ настроить autotools для компиляции кода с помощью -Xcompiler, а затем -Wc, -Xcompiler для связывания? –
@MattJohn: Позже я заметил, что вы даже можете опустить '-Wc ', и опция все еще сохраняется, поскольку она написана как' option = value' вместо 'option value' (поскольку я проверил, что он действителен для' nvcc'). Я не знаю, зарегистрировано ли это 'libtool', поэтому я не упоминал об этом. –
Это работало как шарм! Благодаря :) –