【问题标题】:Compilation fails in VS2010 for C++ programs building fine in Linux在 VS2010 中编译在 Linux 中构建良好的 C++ 程序失败
【发布时间】:2011-01-22 18:49:10
【问题描述】:

我的 C++ 项目在 Linux 上构建和运行良好。现在我正在尝试在 VS2010 中编译它。我似乎从 cmath 库中得到了很多错误,如下所示。

Error   1   error C2061: syntax error : identifier 'acosf'  c:\program files\microsoft visual studio 10.0\vc\include\cmath  19  1   MyPROJ

我还收到许多与文件操作相关的编译错误,例如:

Error   1   error C3861: 'lseek': identifier not found  g:\project\file.cc  274 1   MyPROJ

Error   2   error C3861: 'write': identifier not found  g:\project\file.cc  275 1   MyPROJ

如何消除这些错误。

【问题讨论】:

    标签: c++ windows linux visual-studio-2010 g++


    【解决方案1】:

    lseek 和 write 是不属于 C 标准的 unix(posix?)调用。 它们在 Windows 上可用,但使用名称 _lseek 和 _write

    虽然不确定 acosf

    编辑:acosf 应该可用,是否包含 math.h

    编辑更多:更仔细地查看原始帖子,错误在 cmath 中,这很好,尽管您可能必须编写 std::acosf - 但错误在包含文件中。当我尝试它时它工作正常,因此包含之前的某些内容可能会发生冲突。在您的源代码中包含 cmath 之前是什么?

    【讨论】:

    • 我很少用 cmath/math.h 做任何事情,但很久以前,我不得不明确告诉一些(非 VS)编译器链接到它的数学库。也许VS也有类似的愚蠢?
    • 在 vc2010 上使用 acosf 的测试程序可以编译并且对我来说很好,除了 math.h 之外没有任何特殊的库或头文件
    • _lseek 和 _write 工作正常!我正在使用 yacc (Bison) 为我的语法自动生成的解析器代码(此自动生成代码的文件名是:y.tab.c)。我尝试编辑它并包括“math.h”,但没有帮助。在我在 linux 中使用的 Makefile 中,命令是“g++ -c y.tab.c”。
    【解决方案2】:

    你不能在不改变源代码的情况下将 linux 程序移植到 windows 上,因为它们使用不同的标头

    【讨论】:

      【解决方案3】:

      如果您使用 Windows 的 gcc 编译器的某些端口,您将更容易获得更好的结果。尝试 mingw32 或 cygwin。 Visual Studio 是很好的编译器,但它与 gcc 不同,并且没有相同的库,因此您需要重写源代码的某些部分。

      您得到的错误与缺少功能有关。

      【讨论】:

        猜你喜欢
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 1970-01-01
        • 2019-08-12
        相关资源
        最近更新 更多