-
Notifications
You must be signed in to change notification settings - Fork 76
请使用 pacman-contrib
包里的 updpkgsums
工具。
-
/var/lib/archbuild/extra-riscv64-build/user does not appear to be an Arch chroot
删除
/var/lib/archbuild/extra-riscv64-build/
。 -
包下载完成后报签名错误
devtools 的 chroot 共享了主机 OS 的 pacman 包缓存,如果主机 OS 中存在同名同架构同版本的包(一般是架构无关的 any 包)时,chroot 中的 pacman 就会认为包已经存在,不会尝试下载。而 riscv64 chroot 里 pacman 的源与主机 OS 不一样,包的签名也就不一样,因此会出现签名校验失败的错误。
建议为 chroot 单独创建一个缓存目录(如
~/.cache/rv64-packages
),并在调用 devtools 时把这个目录挂载进去:extra-riscv64-build -- -d ~/.cache/rv64-packages:/var/cache/pacman/pkg
-
一些由 qemu 本身导致的问题,而开发板能编译通过
在 telegram bot 上 使用
/mark
命令标记对应的包,例如:/mark wayland noqemu
error: format not a string literal and no format arguments [-Werror=format-security]
Error: redefined symbol cannot be used on reloc
优先检查上游是否已经修复了问题。若已修复,则可以引入对应的 patch。否则,请尝试修复后提交给上游,并引入 patch。
不建议修改 *FLAGS
绕过问题。
是肥猫的包请告诉肥猫,不是肥猫的包肥猫也没有办法。
考虑:
- 去 Arch 包管理站上 flag outdated
- 手动从上游 cherry-pick 有用的 commit,或将有用的 commit 组合成 patch。
这类问题有很多种情况,需要 case by case 处理。
根源:https://github.com/riscv-collab/riscv-gcc/issues/12
将对应的 -lpthread
改成 -pthread
。参考 https://github.com/felixonmars/archriscv-packages/pull/193/files
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)
没有定论,如果程序也使用了 pthread
请参照上一条。
例如:percona-server 的 lock_free_type.h
gcc 下暂时没有办法让这个宏的值等于 2,请换 clang 试试。
#if defined(__riscv) && __riscv_xlen == 64
考虑换用 alignas(16)
。
if defined(__riscv) && __riscv_xlen == 32
uint32_t cycles_lo, cycles_hi0, cycles_hi1;
// Implemented in assembly because Clang insisted on branching.
asm volatile(
"rdcycleh %0\n"
"rdcycle %1\n"
"rdcycleh %2\n"
"sub %0, %0, %2\n"
"seqz %0, %0\n"
"sub %0, zero, %0\n"
"and %1, %1, %0\n"
: "=r"(cycles_hi0), "=r"(cycles_lo), "=r"(cycles_hi1));
return (static_cast<uint64_t>(cycles_hi1) << 32) | cycles_lo;
#elif defined(__riscv) && __riscv_xlen == 64
uint64_t cycles;
asm volatile("rdcycle %0" : "=r"(cycles));
return cycles;