fortran — неопределенные символы для std :: basic_string при связывании c ++ с использованием gfortran?

Я пытаюсь связать файл C ++ с моей программой на Fortran 90, но у меня возникает ошибка связи при использовании gfortran.

Мои файлы Fortran скомпилированы с:
gfortran -c -o obj/file.o file.f90 -O0 -g3 -ffree-line-length-none -fcheck-array-temporaries -fbounds-check и мой C ++ файл скомпилирован с использованием g++-4.7 -c -o obj/cppfile.o cppfile.cpp -O0 -g3 -std=c++11

Тогда все связаны вместе с gfortran:
gfortran -o program obj/file.o obj/cppfile.o -O0 -g3 -ffree-line-length-none -fcheck-array-temporaries -fbounds-check -lm -llapack -lc -lgfortran -lgcc -lstdc++

При этом я получаю следующие ошибки ссылки:

Неопределенные символы для архитектуры x86_64:
«std :: basic_string, std :: allocator :: basic_string (std :: basic_string, std :: allocator>&&) «, на которые ссылаются:

std :: basic_string, std :: allocator> std :: operator +, std :: allocator> (символ const *, std :: basic_string, std :: allocator>&&) в cppfile.o
std :: basic_string, std :: allocator> std :: operator +, std :: allocator> (std :: basic_string, std :: allocator>&&, char const *) в cppfile.o
std :: basic_string, std :: allocator> std :: operator +, std :: allocator> (std :: basic_string, std :: allocator>&&, std :: basic_string, std :: allocator>&&) в cppfile.o
std :: basic_string, std :: allocator> std :: operator +, std :: allocator> (std :: basic_string, std :: allocator>&&, std :: basic_string, std :: allocator> const&) в cppfile.o
Компонент :: компонент (компонент&&) в cppfile.o «std :: basic_string, std :: allocator> :: operator = (std :: basic_string, std :: allocator>&&) «, на которые ссылаются:
функция в cppfile.o
Компонент :: Оператор = (компонент&&) в cppfile.o

ld: символы не найдены для архитектуры x86_64
collect2: error: ld вернул 1 состояние выхода
делать: * [программа] Ошибка 1

Мой файл C ++ выглядит так:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <math.h>
#include <stdio.h>
#include <vector>

using namespace std;

struct component
{
string num;     // numerator of component
string den;     // denominator of component
int ind;        // index of variable
};

extern "C"{
void subroutine_ (int num, const int* array)
{
...
return;
}

Есть мысли о том, почему это происходит? Я сделал ссылку на библиотеку -lstdc ++. Может ли это иметь какое-то отношение к моему использованию стандарта C ++ 11, связанного с библиотекой строк?

1

Решение

Одним из решений, как представляется, является удаление -std=c++11 из компиляции кода C ++. При этом объединение кода C ++ с вектором строк (или структур, содержащих строку) вызывает вышеуказанные ошибки.

Я собираюсь сообщить об ошибке в GCC Bugzilla и использовать свое решение в качестве временного решения.

1

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

Других решений пока нет …

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