Я пытаюсь написать программу, которая должна использовать библиотеку C (библиотеку LIS) в программе C ++. Кажется, есть проблема с созданием / инициализацией объектов структуры.
Когда я запускаю пример программы на странице википедии: http://en.wikipedia.org/wiki/Lis_%28linear_algebra_library%29 он работает как шарм, но, конечно, он скомпилирован как программа на Си.
В моем коде C ++ я делаю это следующим образом:
#include "stdafx.h"#include <iostream>
extern "C"{
#include "lis.h"#include "lis_config.h"LIS_MATRIX A;
}
using namespace std;int main(LIS_INT argc, char* argv[])
{
lis_initialize(&argc, &argv);
lis_matrix_create(LIS_COMM_WORLD, &A);
getchar();
return 0;
}
Когда я запускаю этот код, он дает мне нарушение прав доступа в строке lis_matrix_create. Кажется, что A имеет адрес памяти, его члены данных (LIS_MATRIX определен как структура в Lis.h) не были инициализированы, и поэтому их адреса равны NULL.
Не могли бы вы рассказать мне, как создать LIS_MATRIX таким образом, чтобы я мог использовать его так, как это сделано в примере кода на странице википедии?
Заранее спасибо!
В ответ Адаму и Россу Риджу:
Я использую Visual Studio 2013 на Windows 7 64 бит. В руководстве по библиотеке Lis говорится, что она совместима с компиляторами Visual Studio 2008, 2010 и 2012, а также с gcc 3.4 и 4.4 и некоторыми компиляторами IBM, Intel и PGI C ++, надеюсь, Visual Studio 2013 не будет проблемой.
Кроме того, в этом коде, если я возьму блок ‘extern C’ и включу ‘stdio.h’ вместо iostream, он будет работать без проблем (поэтому я предполагаю, что это означает, что используется компилятор C?). В ту минуту, когда я включаю iostream, начинается нарушение прав доступа.
Вы в том числе
lis_config.h
после
lis.h
что само по себе является ошибкой (вы должны включить ее раньше). Также, если вы коснулись чего-либо в lis_config, вам нужно перестроить всю библиотеку (используя большинство одинаковых флагов компиляторов вашего проекта, например, «-msee2», если вы использовали SSE2). Перед восстановлением просто поменяйте местами заголовки, чтобы увидеть, достаточно ли этого ..
Еще несколько слов: библиотека может легко обнаружить заголовки, включенные в неправильном порядке, для этого сделайте заявку разработчикам.