261 Star 939 Fork 383

GVPacl-dev / acl

 / 详情

我是Linux arm9的CPU交叉编译fiber时报错,不知道是不是arm32位影响

待办的
创建于  
2022-06-01 11:56

/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

评论 (6)

zhangjijun888 创建了任务

调试出来了:
\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.

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
58291 zsxxsz 1578915783
C++
1
https://gitee.com/acl-dev/acl.git
git@gitee.com:acl-dev/acl.git
acl-dev
acl
acl

搜索帮助