使用 clang 编译 C 程序会导致致命错误:找不到'errno.h'文件



我目前正在尝试编译一个包含zmq 的小型C程序

#include <zmq.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
int main (void)
{
//  Socket to talk to clients
void *context = zmq_ctx_new ();
void *responder = zmq_socket (context, ZMQ_REP);
int rc = zmq_bind (responder, "tcp://*:5555");
assert (rc == 0);
while (1) {
char buffer [10];
zmq_recv (responder, buffer, 10, 0);
printf ("Received Hellon");
sleep (1);          //  Do some 'work'
zmq_send (responder, "World", 5, 0);
}
return 0;
} 

我使用的系统是arm64 darwin和编译器:

Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: arm64-apple-darwin21.2.0

使用以下命令:

clang --target=arm64 -I/usr/local/include server.c

输出:

/usr/local/include/zmq.h:56:10: fatal error: 'errno.h' file not found

我目前已经进入这个问题4个小时,并且已经尝试了以下操作:

  • 从源代码安装zmq和czmq
  • 通过vcpkg安装
  • 使用x86_64和arm64进行编译
  • 使用gcc11编译
  • 将其与cmake一起使用,而不是直接使用编译器命令
  • 尝试添加stdlibc/c++
  • 浏览无数StackOverflow帖子
ls /usr/local/include
czmq.h                 zdir_patch.h           zmq.h
czmq_library.h         zfile.h                zmq_utils.h
czmq_prelude.h         zframe.h               zmsg.h
node                   zgossip.h              zosc.h
zactor.h               zhash.h                zpoller.h
zargs.h                zhashx.h               zproc.h
zarmour.h              zhttp_client.h         zproxy.h
zauth.h                zhttp_request.h        zrex.h
zbeacon.h              zhttp_response.h       zsock.h
zcert.h                zhttp_server.h         zstr.h
zcertstore.h           zhttp_server_options.h zsys.h
zchunk.h               ziflist.h              ztimerset.h
zclock.h               zlist.h                ztrie.h
zconfig.h              zlistx.h               zuuid.h
zdigest.h              zloop.h
zdir.h                 zmonitor.h

我很确定这是我的网站上很容易丢失的愚蠢的东西,但由于我对c++和c完全陌生,并且来自其他语言,我无法理解它。。。我想我只需要合适的搜索词。

如果有人有解决方案,我们将不胜感激但搜索条款和资源,以获得更多的了解周围的主题也受到欢迎。

在最新版本的macOS上,标头被隐藏在视线之外,而不是像在任何文明系统上那样放在/usr/include中。您可能需要设置:

export CPATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include

或:

PartA="/Applications/Xcode.app/Contents/Developer/Platforms/"
PartB="MacOSX.platform/Developer/SDKs/MacOSX.sdk"
export CPATH="$PartA/$PartB/usr/include"

让编译器找到标题——我在运行新版本macOS的Mac上使用自制(现在相当古老(的GCC版本。唯一的可取之处是该目录名中没有空格。

设置CPATH可能就足够了。如果没有,并且设置的目录存在,则添加:

… -I "$CPATH" …

到编译器命令行可以解决问题。我不需要那样做。

我有这个脚本:

#!/bin/sh
#
# @(#)$Id: gcc-env.sh,v 1.2 2021/11/24 03:02:03 jleffler Exp $
#
# Set GCC environment for macOS Catalina 10.15 (and maybe beyond)
MACOSX_SDK="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
export LIBRARY_PATH="$MACOSX_SDK/usr/lib"
export CPATH="$MACOSX_SDK/usr/include"
export MANPATH="$(clnpath $MANPATH:$MACOSX_SDK/usr/share/man)"

我使用. gcc-env来设置环境。然后,我自己构建的GCC编译器就能正常工作。

也就是说,开箱即用的/usr/bin/gcc/usr/bin/clang等Xcode安装"自动"工作。但是,在安装Xcode之后,您需要运行GUI(至少短暂(。它应该提供安装一些额外的东西——让它进行额外的安装。

当我为我的某个特定命令运行带有-v选项的命令时,我会得到输出:

$ clang -v -I/Users/jonathanleffler/inc -g -O3 -std=c11 -pedantic -Wall 
> -Wextra -Werror -Wshadow  -Wmissing-prototypes -Wpointer-arith  -Wold-style-definition 
> -Wcast-qual -Wstrict-prototypes -DHAVE_MEMMEM -DHAVE_STRNDUP -DHAVE_STRNLEN 
> -DHAVE_GETDELIM  -o fl fl.c -L/Users/jonathanleffler/lib/64  -ljl
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple x86_64-apple-macosx10.15.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -disable-free -disable-llvm-verifier -discard-value-names -main-file-name fl.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-sdk-version=10.15 -target-cpu penryn -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 530 -v -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -I /Users/jonathanleffler/inc -D HAVE_MEMMEM -D HAVE_STRNDUP -D HAVE_STRNLEN -D HAVE_GETDELIM -I/usr/local/include -O3 -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes -Wpointer-arith -Wold-style-definition -Wcast-qual -Wstrict-prototypes -Wno-framework-include-private-from-public -Wno-atimport-in-framework-header -Wno-extra-semi-stmt -Wno-quoted-include-in-framework-header -pedantic -std=c11 -fdebug-compilation-dir /Users/jonathanleffler/src/cmd -ferror-limit 19 -fmessage-length 100 -stack-protector 1 -fstack-check -mdarwin-stkchk-strong-link -fblocks -fencode-extended-block-signature -fregister-global-dtors-with-atexit -fobjc-runtime=macosx-10.15.0 -fmax-type-align=16 -fdiagnostics-show-option -fcolor-diagnostics -vectorize-loops -vectorize-slp -o /var/folders/vn/wv38v30s4hz3yvbkdtbn049c0000gn/T/fl-e87f7e.o -x c fl.c
clang -cc1 version 11.0.0 (clang-1100.0.33.17) default target x86_64-apple-darwin19.6.0
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/Users/jonathanleffler/inc
/usr/local/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/include
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -dynamic -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -o fl -L/Users/jonathanleffler/lib/64 /var/folders/vn/wv38v30s4hz3yvbkdtbn049c0000gn/T/fl-e87f7e.o -ljl -L/usr/local/lib -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a
$

另请参阅:

  • 升级到Catalina 10.15后无法在Mac上编译C程序
  • 升级到Mojave后无法在Mac上编译C程序

相关内容

最新更新