使用gfortran链接c ++时std :: basic_string的未定义符号?

时间:2012-12-14 16:38:27

标签: c++ fortran 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> cppfile.o中的std :: operator +,std :: allocator>(char const *,std :: basic_string,std :: allocator>&&)
    std :: basic_string,std :: allocator> cppfile.o中的std :: operator +,std :: allocator>(std :: basic_string,std :: allocator>&&,char const *)
    std :: basic_string,std :: allocator> cppfile.o中的std :: operator +,std :: allocator>(std :: basic_string,std :: allocator>&&,std :: basic_string,std :: allocator>&&) />     std :: basic_string,std :: allocator> cppfile.o中的std :: operator +,std :: allocator>(std :: basic_string,std :: allocator>&&,std :: basic_string,std :: allocator> const&)
    cppfile.o中的component :: component(component&&)“std :: basic_string,std :: allocator> :: operator =(std :: basic_string,std :: allocator>&&)”,引用来自:
    cppfile.o中的 function     cppfile.o中的component :: operator =(component&&)

  
     

ld:找不到架构x86_64的符号
  collect2:错误:ld返回1退出状态
  make: * [program] Error 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 个答案:

答案 0 :(得分:1)

一个解决方案似乎是从C ++代码的编译中删除-std=c++11。有了它,将C ++代码与字符串向量(或包含字符串的结构)相结合会导致上述错误。

我将在GCC Bugzilla中提交一个错误,并在此期间使用我的解决方案作为解决方法。