在 Mac 上制作失败

HB0*_*007 2 c++ macos makefile poco

我正在尝试使用 Makefile 制作我的项目。Makefile 适用于其他 Mac,但在我的情况下会出错。

输出如下:

CC  kernel.cpp
In file included from kernel.cpp:13:
In file included from ./kernel.hpp:22:
In file included from /usr/local/include/Poco/JSON/Object.h:24:
In file included from /usr/local/include/Poco/JSON/Array.h:25:
In file included from /usr/local/include/Poco/Dynamic/Var.h:26:
In file included from /usr/local/include/Poco/Dynamic/VarHolder.h:24:
In file included from /usr/local/include/Poco/NumberFormatter.h:24:
In file included from /usr/local/include/Poco/NumericString.h:25:
In file included from /usr/local/include/Poco/FPEnvironment.h:35:
In file included from /usr/local/include/Poco/FPEnvironment_C99.h:25:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:313:9: error: 
      no member named 'signbit' in the global namespace
using ::signbit;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:314:9: error: 
      no member named 'fpclassify' in the global namespace
using ::fpclassify;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:315:9: error: 
      no member named 'isfinite' in the global namespace; did you mean 'finite'?
using ::isfinite;
      ~~^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/math.h:757:12: note: 
      'finite' declared here
extern int finite(double) __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_0, __M...
           ^
In file included from kernel.cpp:13:
In file included from ./kernel.hpp:22:
In file included from /usr/local/include/Poco/JSON/Object.h:24:
In file included from /usr/local/include/Poco/JSON/Array.h:25:
In file included from /usr/local/include/Poco/Dynamic/Var.h:26:
In file included from /usr/local/include/Poco/Dynamic/VarHolder.h:24:
In file included from /usr/local/include/Poco/NumberFormatter.h:24:
In file included from /usr/local/include/Poco/NumericString.h:25:
In file included from /usr/local/include/Poco/FPEnvironment.h:35:
In file included from /usr/local/include/Poco/FPEnvironment_C99.h:25:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:316:9: error: 
      no member named 'isinf' in the global namespace
using ::isinf;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:317:9: error: 
      no member named 'isnan' in the global namespace
using ::isnan;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:318:9: error: 
      no member named 'isnormal' in the global namespace
using ::isnormal;
      ~~^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:319:7: error: 
      no member named 'isgreater' in the global namespace; did you mean
      '::std::greater'?
using ::isgreater;
      ^~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:718:29: note: 
      '::std::greater' declared here
struct _LIBCPP_TEMPLATE_VIS greater : binary_function<_Tp, _Tp, bool>
                            ^
In file included from kernel.cpp:13:
In file included from ./kernel.hpp:22:
In file included from /usr/local/include/Poco/JSON/Object.h:24:
In file included from /usr/local/include/Poco/JSON/Array.h:25:
In file included from /usr/local/include/Poco/Dynamic/Var.h:26:
In file included from /usr/local/include/Poco/Dynamic/VarHolder.h:24:
In file included from /usr/local/include/Poco/NumberFormatter.h:24:
In file included from /usr/local/include/Poco/NumericString.h:25:
In file included from /usr/local/include/Poco/FPEnvironment.h:35:
In file included from /usr/local/include/Poco/FPEnvironment_C99.h:25:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/cmath:320:7: error: 
      no member named 'isgreaterequal' in the global namespace; did you mean
      '::std::greater_equal'?
using ::isgreaterequal;
      ^~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:747:29: note: 
      '::std::greater_equal' declared here
struct _LIBCPP_TEMPLATE_VIS greater_equal : binary_function<_Tp, _Tp, bool>
                            ^
Run Code Online (Sandbox Code Playgroud)

makefile 已经在 Linux 平台上进行了测试,并且可以正常工作。任何建议,我的 Mac c++ 配置有什么问题?

我使用的是 MacOS High Sierra(10.13) 和 Xcode v9.0.1


已编辑

这是编译命令:

gcc -pipe -x c++ -std=c++11 -fPIC -pedantic -W -Wall -Wwrite-strings -Wcast-align -Wcast-qual -Wpointer-arith -Wshadow -Wendif-labels -Wundef -Wfloat-equal -Werror -Wconversion -DPROJECT_VERSION="0.0.1" -DUSE_SDK="no"  -g -g3 -ggdb3 -D__i386__=1 -D__ppc64__=0 -Wno-sign-conversion -Wno-conversion -Wno-float-equal -Wno-unused-parameter -I/usr/local/include -I/usr/local/opt/openssl/include  -I/usr/local/include -I/usr/local/opt/openssl/include  -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/version -I/git/p2p/inc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/version  src/kernel.cpp -o /git/p2p/obj/kernel.o
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 5

而不是运行的gcc -x c++,我建议你运行g++更好地在MacOS或,clang++

此外,您的编译行似乎缺少-c告诉编译器生成目标文件的选项;没有它,它会尝试链接您的文件并创建一个可执行文件。

此外,我发现您在编译行中添加了-D__i386__和非常奇怪-D__ppc64__:那些通常是由您的操作系统定义的系统宏,而不是在编译器的命令行上提供。

另一个潜在的问题是为什么你要显式地将系统头文件目录添加到你的编译行-I。编译器将自己添加这些,并使用正确的配置。系统标头通常需要格外小心以包含正确的顺序等。

如果您更改到正确的目录并从 shell 提示符运行它:

clang++ -pipe -std=c++11 -fPIC -pedantic -W -Wall -Wwrite-strings \
  -Wcast-align -Wcast-qual -Wpointer-arith -Wshadow -Wendif-labels \
  -Wundef -Wfloat-equal -Werror -Wconversion -DPROJECT_VERSION="0.0.1" \
  -DUSE_SDK="no"  -g -g3 -ggdb3 -Wno-sign-conversion -Wno-conversion \
  -Wno-float-equal -Wno-unused-parameter -I/usr/local/include \
  -I/usr/local/opt/openssl/include -I/git/p2p/inc \
  -c -o /git/p2p/obj/kernel.o  src/kernel.cpp
Run Code Online (Sandbox Code Playgroud)

它编译正确吗?

  • 你不应该*永远*重命名系统头文件!那是疯狂。当您安装新的 Xcode 更新时,它会再次中断;如果你在不同的系统上尝试它会崩溃。此外,现在您的系统无法编译想要使用 `math.h` 头文件的 C 程序。您是否尝试过我建议的编译行?从您的评论看来,问题确实是在命令行上强行包含头目录,并且顺序错误:编译 C++ 代码时,您需要 math.h 的 C++ 版本;编译 C 代码时为 C 版本。如果您允许,编译器会为您处理。 (2认同)