编译Mesapy HelloWorld示例时出现fcntl64未定义引用错误求助
解决Mesapy HelloWorld示例编译时
fcntl64未定义引用错误 问题场景
在Ubuntu 20.04.4 LTS环境下,运行Mesapy的HelloWorld示例,进入对应目录执行make命令后,出现以下链接错误:
~/mesapy/sgx/examples/hello_world$ make MAKE <= ../../sgx_ulibc LINK => app MAKE <= ../../sgx_tlibc_ext /usr/local/bin/ld: ../../../pypy/goal/libpypy-c.a(implement_4.o): in function `pypy_g_ccall_fcntl__INT_INT_INT': implement_4.c:(.text+0xe649): undefined reference to `fcntl64' collect2: error: ld returned 1 exit status make: *** [Makefile:234: enclave.so] Error 1
解决方案
方案1:在SGX可信库中添加fcntl64兼容实现
- 进入Mesapy的
sgx_tlibc_ext目录:cd ~/mesapy/sgx/sgx_tlibc_ext - 在
src/fcntl.c文件末尾添加以下代码:#ifdef _LARGEFILE64_SOURCE int fcntl64(int fd, int cmd, ...) { va_list args; va_start(args, cmd); void* arg = va_arg(args, void*); va_end(args); return fcntl(fd, cmd, arg); } #endif - 重新编译
sgx_tlibc_ext:make clean && make - 返回HelloWorld示例目录,重新执行编译:
cd ~/mesapy/sgx/examples/hello_world make
方案2:替换PyPy中的fcntl64调用
- 进入PyPy目标文件目录:
cd ~/mesapy/pypy/goal - 打开
implement_4.c,定位到pypy_g_ccall_fcntl__INT_INT_INT函数,将其中的fcntl64调用替换为fcntl:// 原代码:result = fcntl64(fd, cmd, arg); // 修改为: result = fcntl(fd, cmd, arg); - 重新编译生成
libpypy-c.a:make clean && make - 回到HelloWorld目录执行
make。
方案3:在Makefile中添加编译宏定义
进入HelloWorld示例目录,修改Makefile,在编译enclave的CFLAGS配置中添加宏定义:
# 找到ENCLAVE_CFLAGS相关定义行,追加以下内容 ENCLAVE_CFLAGS += -D_GNU_SOURCE -D_LARGEFILE64_SOURCE
保存文件后重新执行make。
内容的提问来源于stack exchange,提问作者sama
相关产品推荐
相关产品推荐

