Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Interop] iso_c_binding, IFC и VS 
V
    Опции темы
popovda
Дата 26.3.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Сколько раз пользовался iso_c_binding, но понять, что же случилось в этот раз - не пойму. Туплю.

Итак, для простоты (тупо просто работающая функция, важно, что парамерты совпадают с реальной), есть C-функция, помещенная в статическую библиотеку:
Код

#include <iostream>

using namespace std;

int C_test_func(int M, int N, double *Z){
    
        cout<<"Rows = "<<M<<"; "<<"Cols = "<<N<<endl;
        cout<<"Array data:"<<endl;
        for (int i = 0; i<M; i++){
            for (int j = 0; j<N; j++){
                cout<<Z[i*M + j]<<'   ';    
            }//for j...
            cout<<endl;
        }//for i...

return M*N;
}



и есть вызывающая её Фортран-программа:

Код

program TestCBinding

use, intrinsic :: iso_C_binding;

implicit none;

interface C_Func
    ! Интерфейс к C-функции
    ! int C_test_func(int M, int N, double *Z)
    integer(C_INT) function C_Func(M,N,Z) bind(C,NAME = 'C_test_func')
        use , intrinsic :: iso_C_binding;    
        implicit none;
        
        ! Параметры
        integer(C_INT), value, intent(in) :: M;
        integer(C_INT), value, intent(in) :: N;
        real(C_DOUBLE), dimension(:,:), intent(in) :: Z;
    end function C_Func;
end interface C_Func;

integer(4) :: M,N,i,j;
real(8), allocatable, dimension(:,:) :: A;

integer(C_INT) :: cM, cN, res;
real(C_DOUBLE), pointer, dimension(:,:) :: Z;

M = 5;
N = 10;


allocate(A(M,N));
print *,'Das Fortran:'
do i = 1,M
    do j = 1,N
    
        A(i,j) = sin(dble(3.1415*i)) + cos(dble(-6.2830*j));
        print *,'A(',i,';',j,') = ',A(i,j);
    end do;
end do;

read(*,*)

print*
print*
print*
print*, 'Das C:' 

res = C_Func(M,N,RESHAPE(A, (/N,M/), ORDER = (/ 2, 1/)));

deallocate(A);

print *,'Result = ', res;

end program TestCBinding



Ошибка линковки:
Error    2     error LNK2019: unresolved external symbol _C_test_func referenced in function _MAIN__    F_Code.obj    

ПОЧЕМУ?! Путь к статической библиотеке в проекте прописан.


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
adejneka
Дата 26.3.2009, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: нет
Всего: 11



C_test_func больше похожа на C++-функцию, чем на C. Может, обрамить её extern "C" {...}?
PM MAIL   Вверх
popovda
Дата 26.3.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Гм...А ведь логично. 


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.