链接c ++和fortran源代码时的未定义符号_Z7_getcwdPci

时间:2012-06-26 16:20:27

标签: c++ fortran undefined symbols ld

我正在尝试将用Microsoft Visual Studio编写的程序(在c,c ++和fortran中)移植到mac OSX。在这个程序中是一个由fortran源代码调用的c ++函数。基本上它是interloping 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 ++函数

1 个答案:

答案 0 :(得分:2)

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

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

名称出现损坏这一事实表明编译器认为它是可能重载的C ++函数,因此它将包含名称中参数类型的详细信息。将#include语句括在extern "C"块中可以避免这种情况。对于Windows文件direct.h,这不会解决上述问题,但可能会使unistd.h对您有用:

extern "C" {
#include <unistd.h>
}