我正在尝试将用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 ++函数答案 0 :(得分:2)
据我了解您的问题,您尝试通过从 Windows 系统中复制头文件来构建程序。到目前为止?该方法必然会失败:头文件的存在将为编译器提供有关 Windows 系统上可用的功能的信息,但链接器会抱怨,因为所列出的库都没有定义所述名称的功能。
您应该只使用系统附带的标头,或者您已经为系统成功编译的第三方库。仅源代码头(特别是模板库)也可以。使用任何其他标头只是要求链接器错误。
名称出现损坏这一事实表明编译器认为它是可能重载的C ++函数,因此它将包含名称中参数类型的详细信息。将#include
语句括在extern "C"
块中可以避免这种情况。对于Windows文件direct.h
,这不会解决上述问题,但可能会使unistd.h
对您有用:
extern "C" {
#include <unistd.h>
}