2

我正在尝试将用 Microsoft Visual Studio(c、c++ 和 fortran)编写的程序移植到 mac OSX。在这个程序中有一个由 fortran 源代码调用的 c++ 函数。基本上它的插入 c++ 和 fortran。我已将 C++ 函数包裹在"extern C"括号中,通过互联网告诉我这是正确的方法。但是,链接器仍在抱怨此 c++ 函数中的未定义符号...

Undefined symbols:
  "__Z7_getcwdPci", referenced from:
      _bisimr_ in bisimR.o
ld: symbol(s) not found

如果您通过互联网查看,getcwd是在头文件中定义的函数,"direct.h". 它不是 mac OS 的一部分,仅在 Windows 系统中固有。据我所知,我能够在互联网上找到该文件,该文件似乎是 Windows“direct.h”文件。

现在我们已经完成了上下文,这是我的问题

鉴于我收到错误,可能是我的direct.h文件不是 Windows 的正确头文件吗?或者是名称修改,从 C++ 到 fortran,抛出这个错误?

笔记:

  • 我可以通过编译阶段,它是引发此错误的库的链接。
  • bisimr_是c++函数
4

1 回答 1

2

据我了解您的问题,您尝试通过从Windows系统复制头文件来构建程序。到此为止吧?这种方法注定会失败:头文件的存在将为编译器提供有关Windows系统上可用函数的信息,但链接器会抱怨,因为列出的库都没有定义所述名称的函数。

您应该只使用系统附带的头文件,或者您已经为您的系统成功编译的第三方库。仅源代码的标头(特别是模板库)也可以。使用任何其他标头只是询问链接器错误。

名称出现错误的事实表明编译器认为它是一个可能重载的 C++ 函数,因此它将在名称中包含有关参数类型的详细信息。#include可以通过将语句包含在extern "C"块中来避免该方面。对于 windows 文件direct.h,这不会解决上述问题,但也许它会对unistd.h您有用:

extern "C" {
#include <unistd.h>
}
于 2012-06-26T17:05:01.930 回答