여기에서 CHERI 에뮬레이터를 설치했습니다.협회.
이를 통해 risc-v용 clang 컴파일러를 사용할 수 있고 확장된 risc-v 아키텍처 기능을 사용할 수 있습니다.
다음 별칭을 정의했습니다.
alias clang-riscv='~/cheri/output/sdk/bin/clang -g -O2 -target riscv64-unknown-freebsd --sysroot="~/cheri/output/rootfs-riscv64-purecap" -fuse-ld=lld -mno-relax -march=rv64gc -mabi=lp64d -Wall -Wcheri'
alias clang-cap='~/cheri/output/sdk/bin/clang -g -O2 -target riscv64-unknown-freebsd --sysroot="~/cheri/output/rootfs-riscv64-purecap" -fuse-ld=lld -mno-relax -march=rv64gcxcheri -mabi=l64pc128d -Wall -Wcheri'
다음 명령을 실행한 후 오류가 발생합니다.
$ clang-riscv print-pointer.c
print-pointer.c:5:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.
$ clang-cap print-capability.c
print-capability.c:5:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.
디렉토리를 확인했는데 sysroot/usr/include
거기에 디렉토리가 포함되어 있는데 stdio.h
링커가 왜 디렉토리를 찾을 수 없는지 잘 모르겠습니다.
sathvik@sathvik-Aspire-A515-51G:~/cheri/output/rootfs-riscv64-purecap/usr/include$ ls
aio.h curses.h fstab.h krb5 math.h parse_time.h rtld_db.h syslog.h
alias.h cuse.h fts.h krb5_asn1.h md4.h parse_units.h runetype.h taclib.h
a.out.h db.h ftw.h krb5_ccapi.h md5.h pathconv.h sched.h tar.h
archive_entry.h der.h gcc krb5_err.h memory.h paths.h scsi_wrap.h tcpd.h
archive.h der-private.h gelf.h krb5.h memstat.h pcap sdp.h teken
ar.h der-protos.h geom krb5-private.h menu.h pcap-bpf.h search.h termcap.h
arpa dev getarg.h krb5-protos.h mixer.h pcap.h security term.h
asn1-common.h devctl.h getopt.h krb5-types.h monetary.h pcap-namedb.h _semaphore.h termios.h
asn1_err.h devdctl glob.h kvm.h mp.h pcap-netmap.h semaphore.h tgmath.h
assert.h devinfo.h grp.h kx509_asn1.h mpool.h pkcs10_asn1.h setjmp.h threads.h
atf-c devstat.h gssapi langinfo.h mqueue.h pkcs12_asn1.h sha224.h timeconv.h
atf-c++ dialog.h gssapi.h lib80211 mtlib.h pkcs8_asn1.h sha256.h time.h
atf-c.h digest_asn1.h hdb_asn1.h lib9p ncurses_dll.h pkcs9_asn1.h sha384.h timers.h
atf-c++.hpp dirent.h hdb_err.h libcasper.h ncurses.h pkinit_asn1.h sha512.h ttyent.h
base64.h dlfcn.h hdb.h libcasper_service.h ndbm.h pmcformat.h sha512t.h uchar.h
bitstring.h dlg_colors.h hdb-protos.h libdwarf.h net pmc.h sha.h ucontext.h
blacklist.h dlg_config.h heim_asn1.h libelf.h net80211 pmclog.h signal.h ufs
Block.h dlg_keys.h heimbase.h libgen.h netconfig.h poll.h skein_freebsd.h ugidfw.h
Block_private.h dpv.h heim_err.h libgeom.h netdb.h printf.h skein.h ulimit.h
bluetooth.h dwarf.h heimntlm.h libgpio.h netgraph private skein_iv.h ulog.h
bsdxml_external.h edit heimntlm-protos.h libipt netgraph.h proc_service.h skein_port.h unctrl.h
bsdxml.h efivar-dp.h heim_threads.h libmilter netinet protocols spawn.h unistd.h
bsm efivar.h hex.h libproc.h netinet6 pthread.h stab.h usb.h
bsnmp elf.h histedit.h libprocstat.h netipsec pthread_np.h statcounters.h usbhid.h
bzlib.h elf-hints.h hx509_err.h librss.h netnatm pwd.h statcounters_md.h utempter.h
c++ err.h hx509.h libufs.h netpfil radlib.h statcounters_md.inc utime.h
calendar.h errno.h hx509-private.h libusb20_desc.h netsmb radlib_vs.h stdalign.h utmpx.h
cam eti.h hx509-protos.h libusb20.h nfs ranlib.h stdarg.h uuid.h
camlib.h execinfo.h iconv.h libusb.h nfsclient rdma stdatomic.h varargs.h
capsicum_helpers.h fcntl.h ieeefp.h libutil.h nfsserver readpassphrase.h stdbool.h vis.h
casper fenv.h ifaddrs.h libxo nlist.h regex.h stddef.h vm
cheri fetch.h infiniband limits.h nl_types.h resolve.h stdint.h wchar.h
cms_asn1.h figpar.h inttypes.h linker_set.h nss.h resolv.h stdio.h wctype.h
com_err.h filecomplete.h iso646.h link.h nsswitch.h res_update.h stdlib.h wind_err.h
compat FlexLexer.h isofs locale.h ntlm_err.h rfc2459_asn1.h stdnoreturn.h wind.h
complex.h float.h jail.h login_cap.h ocsp_asn1.h ripemd.h string.h wordexp.h
com_right.h floatingpoint.h k524_err.h lzma opencsd roken-common.h stringlist.h xdbm.h
cpio.h fmtmsg.h kadm5 lzma.h openssl roken.h string_m.h xlocale
crmf_asn1.h fmtutils.h kafs.h machine opie.h rpc strings.h xlocale.h
crypto fnmatch.h kdc.h magic.h osreldate.h rpcsvc sys ypclnt.h
_ctype.h form.h kdc-protos.h malloc.h panel.h rpoll.h sysdecode.h zconf.h
ctype.h fs kenv.h malloc_np.h parse_bytes
clang
이 플래그를 사용하여 명령을 실행하면 -v
다음이 표시됩니다.
ignoring nonexistent directory "~/cheri/output/rootfs-riscv64-purecap/usr/include"
폴더가 존재하며 모든 헤더를 포함합니다.
이 오류를 어떻게 해결할 수 있나요?
답변1
존재하지 않는 디렉토리 "~/cheri/output/rootfs-riscv64-purecap/usr/include" 무시
~
아, 거기에 확장되지 않은 것이 있습니다. 변환은 다른 곳에서는 작동할 것으로 기대할 수 없는 셸 기능 ~
입니다 . 별칭에서 로 바꾸세요 ./home/username
~
~
/home/yourusername