gcc — файл конфигурации Cmake для вызова кода C ++ из функции C ++, вызываемой кодом FORTRAN

Я использовал код FORTRAN, main.f90, для отправки массива в func.cpp, который будет вызывать код C ++ ,dition.cpp & addition.h. Код работал правильно на платформе CentOS 4, но когда я переместил его на CentOS 6, он выдает мне ошибки. Я пытался использовать одну и ту же версию gcc (4.3.0) на обеих машинах или более новую версию 4.4.7 в CentOS 6, но проблема не решена. Я прилагаю упрощенную версию кода как

main.f90:

 program main
use iso_c_binding
implicit none

interface
function func (a) bind (C, name="func")
import
integer(c_int):: func
real(c_double), dimension(1:4), intent(in):: a
end function func
end interface

real(c_double), dimension(1:4):: a = [ 2.3, 3.4, 4.5, 5.6 ]
integer(c_int):: result
result = func(a)
write (*,*) result
end program main

func.cpp:

#include <iostream>
#include "addition.h"using namespace std;

#ifdef __cplusplus
extern"C" {
#endif

void *__gxx_personality_v0;

int func(double a[]) {
int i;
for(i=0; i<4; i++) {
cout << a[i] << endl;
}
int z;
z = addition (5,3);
cout << z << endl;
return 0;
}

#ifdef __cplusplus
}
#endif

addition.cpp:

#include <iostream>
#include "addition.h"using namespace std;
int addition (int a, int b)
{
int r;
r = a + b;
return r;
}

addition.h:

#ifndef ADDITION_H
#define   ADDITION_H
int addition (int a, int b);
#endif /* ADDITION_H */

CMakeLists.txt:

PROJECT(test)
cmake_minimum_required(VERSION 2.6)
enable_language(C Fortran)
# Setting the compilers
set (CMAKE_Fortran_COMPILER /usr/bin/gfortran)
set (CMAKE_CXX_COMPILER /usr/bin/g++)
# Setting the flags
set (CMAKE_CXX_FLAGS "-lgfortran")
set_source_files_properties(main.f90 func.cpp PROPERTIES COMPILE_FLAGS -c)
# Making the executable
ADD_EXECUTABLE(test.exe main.f90 func.cpp addition.cpp addition.h)

Ошибка, которую я получаю сейчас:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
make[2]: *** [test.exe] Error 1
make[1]: *** [CMakeFiles/test.exe.dir/all] Error 2
make: *** [all] Error 2

Я ценю любую помощь в решении проблемы.

0

Решение

Почему вы связываетесь с g++ когда ваша основная программа находится на Фортране? Сделай это по-другому, свяжись с gfortran и добавить -lstdc++,

Просто добавьте строку: SET_TARGET_PROPERTIES(test.exe PROPERTIES LINKER_LANGUAGE Fortran)

Или используйте более поздний GCC. Все поддерживаемые версии GCC работают даже с вашими исходными настройками.

1

Другие решения


По вопросам рекламы [email protected]