/home/src/acl/acl-arm/lib_acl_cpp/../lib_fiber/lib/libfiber.a(fiber_unix.o): In function fiber_unix_swap': fiber_unix.c:(.text+0x240): undefined reference to
SETJMP'
fiber_unix.c:(.text+0x2f8): undefined reference to `LONGJMP'
collect2: error: ld returned 1 exit status
make: *** [all] 错误 1
调试出来了:
\lib_fiber\c\src\fiber\fiber_unix.c第8行应该增加arm32位的宏定义
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
我没有arm32的环境,不过我修改了一下 Makefile 文件,你再尝试一下。
我试了下编译还是没通过主要是arm的判断有问题,修改了下Makefile文件主要根据$CC变量判断arm后宏定义USE_BOOST_JMP并取消定义宏SHARE_STACK。这样修改的前提是要将mipsel-linux-gcc软连接为通用名arm-linux-gcc。最好还是将defined(arm)加入源文件中,修改Makefile太麻烦。
ifeq ($(findstring arm, $(CC)), arm)
JMP_CTX = USE_BOOST_JMP -USHARE_STACK
endif
Makefile如下
SHELL = /bin/sh
CC = gcc
#CC = g++
CC = ENVCCAR={ENV_AR}
ARFL = rv
#ARFL = cru
RANLIB = ${ENV_RANLIB}
#JMP_CTX = DUMMY
JMP_CTX = USE_JMP_DEF
#JMP_CTX = USE_BOOST_JMP
CFLAGS = -c -g -W
-std=gnu99
-fPIC
-Wall
-Wpointer-arith
-Wshadow
-D_REENTRANT
-D_POSIX_PTHREAD_SEMANTICS
-D_USE_FAST_MACRO
-Wno-long-long
-Wmissing-prototypes
-Wcast-qual
-DUSE_FAST_RING
#-O3
#-DUSE_VALGRIND
#-DUSE_INLINE_MEMCPY
#-DUSE_FAST_TIME
#-Waggregate-return
#-DDEBUG_MEM
#-I/usr/local/include
#-DUSE_PRINTF_MACRO
#-Wno-clobbered
#-pedantic
-Wcast-align
#CFLAGS = -c -g -W -Wall -Wcast-qual -Wcast-align
#-Waggregate-return -Wmissing-prototypes
#-Wpointer-arith -Werror -Wshadow -O2
#-D_POSIX_PTHREAD_SEMANTICS -D_USE_FAST_MACRO
###########################################################
#Check system:
Linux, SunOS, Solaris, BSD variants, AIX, HP-UX
SYSLIB =
CHECKSYSRES = @Echo "Unknow system type!";exit 1
UNIXNAME = $(shell uname -sm)
UNIXTYPE = LINUX
ifeq ($(CC),)
CC = gcc
endif
ifeq ($(AR),)
AR = ar
endif
ifeq ($(RANLIB),)
RANLIB = ranlib
endif
ifeq ((findstringAlpine,(shell uname -a)), Alpine)
CFLAGS += -DALPINE
endif
ifeq ((findstringgcc,(CC)), gcc)
CFLAGS += -Wstrict-prototypes
GCC_VERSION=(shellgcc−−version|grepgcc|sed′s/.∗//g′)GCCMAJOR:=(shell echo "(GCCVERSION)"|cut−d′.′−f1)GCCMINOR:=(shell echo "(GCCVERSION)"|cut−d′.′−f2)GCCSUB:=(shell echo "(GCCVERSION)"|cut−d′.′−f3)GCCVER:=(shell [ (GCCMAJOR)−gt4−o((GCC_MAJOR) -eq 4 -a $(GCC_MINOR) -gt 4 ) ] && echo true)
ifeq ($(GCC_VER), true)
CFLAGS += -Wno-implicit-fallthrough
CFLAGS += -Wno-absolute-value
endif
endif
ifeq ((findstringclang,(CC)), clang)
CFLAGS += -Wstrict-prototypes
-Wno-invalid-source-encoding
-Wno-invalid-offsetof
endif
ifeq ((findstringclang++,(CC)), clang++)
CFLAGS += -Wno-invalid-source-encoding
-Wno-invalid-offsetof
endif
ifeq ((findstringarm,(CC)), arm)
JMP_CTX = USE_BOOST_JMP -USHARE_STACK
endif
For FreeBSD
ifeq ((findstringFreeBSD,(UNIXNAME)), FreeBSD)
UNIXTYPE = FREEBSD
endif
For Darwin
ifeq ((findstringDarwin,(UNIXNAME)), Darwin)
CC += -arch x86_64 -arch arm64
CFLAGS += -DMACOSX -Wno-invalid-source-encoding
-Wno-invalid-offsetof
-Wno-deprecated-declarations
endif
For Linux
ifeq ((findstringLinux,(UNIXNAME)), Linux)
UNIXTYPE = LINUX
CFLAGS += -DSHARE_STACK
endif
For MINGW
ifeq ((findstringMINGW,(UNIXNAME)), MINGW)
CFLAGS += -DLINUX2 -DMINGW
endif
For MSYS
ifeq ((findstringMSYS,(UNIXNAME)), MSYS)
CFLAGS += -DLINUX2 -DMINGW
endif
For SunOS
ifeq ((findstringSunOS,(UNIXNAME)), SunOS)
ifeq ((findstring86,(UNIXNAME)), 86)
SYSLIB = -lsocket -lnsl -lrt
endif
ifeq ((findstringsun4u,(UNIXNAME)), sun4u)
SYSLIB = -lsocket -lnsl -lrt
endif
CFLAGS += -DSUNOS5
UNIXTYPE = SUNOS5
endif
For HP-UX
ifeq ((findstringHP−UX,(UNIXNAME)), HP-UX)
CFLAGS += -DHP_UX -DHPUX11
UNIXTYPE = HPUX
endif
set which jump lib should be used
CFLAGS += -D$(JMP_CTX)
#Find system type.
ifneq ($(SYSPATH),)
CHECKSYSRES = @Echo "System is $(shell uname -sm)"
endif
###########################################################
LIB_PATH_DST = ../lib
OBJ_PATH_DST = ./debug
SRC_PATH_SRC = ./src
INC_COMPILE = -I./include -I./src -I./src/common
CFLAGS += $(INC_COMPILE)
#Project's objs
SRC = (wildcard(SRC_PATH_SRC)/.c)
(wildcard(SRC_PATH_SRC)/common/.c)
(wildcard(SRC_PATH_SRC)/dns/.c)
(wildcard(SRC_PATH_SRC)/fiber/.c)
(wildcard(SRC_PATH_SRC)/event/.c)
(wildcard(SRC_PATH_SRC)/hook/.c)
#ASM_OBJ=(OBJPATHDST)/setjmp.o(OBJ_PATH_DST)/make_gas.o (OBJPATHDST)/jumpgas.oASMOBJ=(OBJ_PATH_DST)/make_gas.o (OBJPATHDST)/jumpgas.oOBJ=(patsubst %.c, (OBJPATHDST)/(notdir (SRC)))(ASM_OBJ)
###########################################################
STATIC_LIBNAME = libfiber.a
SHARED_LIBNAME = libfiber.so
STATIC_OLD_LIBNAME = lib_fiber.a
SHARED_OLD_LIBNAME = lib_fiber.so
###########################################################
.PHONY = static shared clean
COMPILE = (CC)(CFLAGS) -O3
COMPILE_FIBER = (CC)(CFLAGS)
all: static shared
rebuild rb: clean all
(shellmkdir−p(OBJ_PATH_DST))
static: $(OBJ)
@Echo 'creating (LIBPATHDST)/(STATIC_LIBNAME)'
(AR)(ARFL) (LIBPATHDST)/(STATIC_LIBNAME) (OBJ)(RANLIB) (LIBPATHDST)/(STATIC_LIBNAME)
@(cd (LIBPATHDST);rm−f{STATIC_OLD_LIBNAME};
ln -s (STATICLIBNAME){STATIC_OLD_LIBNAME})
@Echo 'build (LIBPATHDST)/(STATIC_LIBNAME) ok!'
shared_ldflags = -lrt -lpthread
shared: $(OBJ)
@Echo ''
@Echo 'creating $(SHARED_LIBNAME)'
@if test -n "(rpath)" && test "(UNIXTYPE)" = "LINUX"; then
echo "building for linux";
(CC)−shared−o(rpath)/(SHAREDLIBNAME)(OBJ)
-L(rpath)(shared_ldflags) -Wl,-rpath,(rpath);echo′build(rpath)/(SHAREDLIBNAME)ok!′;eliftest−n"(rpath)" && test "(UNIXTYPE)"="SUNOS5";thenecho"buildingforsunos5";(CC) -shared -o (rpath)/(SHARED_LIBNAME) (OBJ)−R(rpath) -L(rpath)(shared_ldflags);
echo 'build (rpath)/(SHARED_LIBNAME) ok!';
elif test -n "(rpath)" && test "(UNIXTYPE)" = "MACOSX"; then
echo "building for Darwin";
(CC)−shared−o(rpath)/(SHAREDLIBNAME)(OBJ)
-R(rpath)−L(rpath) -lpthread;
echo 'build (rpath)/(SHARED_LIBNAME) ok!';
elif test -n "(rpath)" && test "(UNIXTYPE)" = "FREEBSD"; then
echo "building for FreeBSD";
(CC)−shared−o(rpath)/(SHAREDLIBNAME)(OBJ)
-R(rpath)−L(rpath) -lpthread;
echo 'build (rpath)/(SHARED_LIBNAME) ok!';
else
echo 'skip build $(SHARED_LIBNAME); usage: make shared rpath=xxx';
fi
(OBJPATHDST)/(SRC_PATH_SRC)/%.c
(COMPILE)< -o @(OBJ_PATH_DST)/%.o: (SRCPATHSRC)/common/(COMPILE) <−o@
(OBJPATHDST)/(SRC_PATH_SRC)/dns/%.c
(COMPILE)< -o @(OBJ_PATH_DST)/%.o: (SRCPATHSRC)/fiber/(COMPILE) <−o@
#(OBJPATHDST)/setjmp.o:(SRC_PATH_SRC)/fiber/exp/setjmp.S
(COMPILE)< -o $@
(OBJPATHDST)/makegas.o:(SRC_PATH_SRC)/fiber/boost/make_gas.S
(COMPILE)< -o @(OBJ_PATH_DST)/jump_gas.o: (SRCPATHSRC)/fiber/boost/jumpgas.S(COMPILE) <−o@
(OBJPATHDST)/(SRC_PATH_SRC)/event/%.c
(COMPILE)< -o @(OBJ_PATH_DST)/%.o: (SRCPATHSRC)/hook/(COMPILE) <−o@
clean cl:
rm -f (LIBPATHDST)/{STATIC_LIBNAME}
rm -f (LIBPATHDST)/{SHARED_LIBNAME}
rm -f (LIBPATHDST)/{STATIC_OLD_LIBNAME}
rm -f (LIBPATHDST)/{SHARED_OLD_LIBNAME}
rm -f $(OBJ)
你的机器环境里执行:uname -a 及 uname -sm 显示什么?
~ # uname -a
Linux (none) 3.4.2 13 Thu May 26 14:20:06 CST 2022 armv4tl GNU/Linux
~ # uname -sm
Linux armv4tl
~ #
这是目标机,但是我使用的centos7交叉编译
可以使用 cmake 编译,cmake 编译时默认使用 boost jmp.
登录 后才可以发表评论