Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
macOS上linux的交叉编译_C_Macos_Clang_Llvm - Fatal编程技术网

macOS上linux的交叉编译

macOS上linux的交叉编译,c,macos,clang,llvm,C,Macos,Clang,Llvm,我正在尝试在macOS上为linux交叉编译。似乎clang不尊重我设置的sysroot 节目 #include <stdio.h> int main() { printf("Hello World!\n"); return 0; } 输出 % make /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin/clan

我正在尝试在macOS上为linux交叉编译。似乎clang不尊重我设置的sysroot

节目

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}
输出

% make 
/Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin/clang -v -c -target x86_64-pc-linux-elf main.c -o main.o \
        -isysroot /Users/user/Development/com/prog/site_scons/builders/linux/sysroot
clang version 9.0.0 (git://github.com/llvm/llvm-project.git 0399d5a9682b3cef71c653373e38890c63c4c365)
Target: x86_64-pc-linux-elf
Thread model: posix
InstalledDir: /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin
 "/Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin/clang-9" -cc1 -triple x86_64-pc-linux-elf -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -target-linker-version 512.4 -v -coverage-notes-file /Users/user/Development/testlinker/main.gcno -resource-dir /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0 -isysroot /Users/user/Development/com/prog/site_scons/builders/linux/sysroot -internal-isystem /usr/local/include -internal-isystem /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /Users/user/Development/testlinker -ferror-limit 19 -fmessage-length 128 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -faddrsig -o main.o -x c main.c
clang -cc1 version 9.0.0 based upon LLVM 9.0.0 default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/include"
ignoring nonexistent directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0/include
End of search list.
main.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.
make: *** [target] Error 1
当我使用crosstool ng并使用其sysroot时,甚至会发生这种情况


就像clang没有在我设置的sysroot中显示一样?

您不是交叉编译而是交叉链接。详细的输出正好显示了这一点:
-triple x86\u 64-apple-macosx10.15.0
。链接器(给定一个elf目标选项)需要一个elf二进制文件,但您给它mach-o。为交叉编译目标获取一个libc版本,然后让整个构建使用相应的选项运行。@dtell-没有注意到!将
-target x86\u 64-pc-linux-elf
添加到第一个命令中,会产生
致命错误:“未找到stdio.h”文件
。这似乎是一个sysroot问题?这正是为交叉编译目标获取libc版本的关键所在;)虽然我不能100%确定苹果的ld64是否支持elf。如果不使用某种持续集成平台,使用VM或Docker容器进程进行干净的构建可能会更容易。交叉编译的设置不一定很简单。@tadman这就是我发现的。。。
% make 
/Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin/clang -v -c -target x86_64-pc-linux-elf main.c -o main.o \
        -isysroot /Users/user/Development/com/prog/site_scons/builders/linux/sysroot
clang version 9.0.0 (git://github.com/llvm/llvm-project.git 0399d5a9682b3cef71c653373e38890c63c4c365)
Target: x86_64-pc-linux-elf
Thread model: posix
InstalledDir: /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin
 "/Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/bin/clang-9" -cc1 -triple x86_64-pc-linux-elf -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -dwarf-column-info -debugger-tuning=gdb -target-linker-version 512.4 -v -coverage-notes-file /Users/user/Development/testlinker/main.gcno -resource-dir /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0 -isysroot /Users/user/Development/com/prog/site_scons/builders/linux/sysroot -internal-isystem /usr/local/include -internal-isystem /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir /Users/user/Development/testlinker -ferror-limit 19 -fmessage-length 128 -fobjc-runtime=gcc -fdiagnostics-show-option -fcolor-diagnostics -faddrsig -o main.o -x c main.c
clang -cc1 version 9.0.0 based upon LLVM 9.0.0 default target x86_64-apple-darwin19.0.0
ignoring nonexistent directory "/include"
ignoring nonexistent directory "/usr/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Users/user/Development/com/prog/site_scons/builders/darwin/clang+llvm-9.0.0-x86_64-darwin-apple/lib/clang/9.0.0/include
End of search list.
main.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.
make: *** [target] Error 1
% ll /Users/user/Development/com/prog/site_scons/builders/linux/sysroot/usr/include/stdio.h
-rw-r--r--@ 1 user  staff  29949 Sep 16 10:56 /Users/user/Development/com/prog/site_scons/builders/linux/sysroot/usr/include/stdio.h