我目前正在尝试编译一个包含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程序