gpt4 book ai didi

c - 在 rtems 中使用 powf 函数(对 powf 的 undefined reference )

转载 作者:行者123 更新时间:2023-11-30 16:54:18 30 4
gpt4 key购买 nike

我正在尝试在 rtems 应用程序中使用 powf 函数。当我调用 powf(a,b); 时在 Init() 函数中,它编译正常。但是当我在其他函数中调用 powf 时,编译器会给出“对 powf 的 undefined reference ”消息,即使我有这些 #include <math.h>#include <float.h> 。我尝试合并文件,但结果是一样的。

#define CONFIGURE_...
#define CONFIGURE_...
#include <rtems/confdefs.h>

rtems_task Init( rtems_task_argument ignored)
{


powf(a,b); // ok

}

int my_other_func()
{

powf(c,d); // undefined reference error..

}

可能是什么问题?

编辑(添加):我在下面添加了源代码和 makefile。编译后的rtems OS包由shell环境变量RTEMS_MAKEFILE_PATH指定。

生成文件:

include ../Makefile.base
_RAM_START = 0x60000000
XCFLAGS = -qnolinkcmds -T ../../lib/linkcmds.abts3 -D_RAM_START=$(_RAM_START)
XCFLAGS += -lm -DALDEBARAN_RTEMS

../Makefile.base:

#
# RTEMS_MAKEFILE_PATH is typically set in an environment variable
#

PGM=${ARCH}/faster_rcnn.exe

# optional managers required
MANAGERS=all

# C source names

VPATH = ../src
VPATH += ../../../../abfrcnn/bare-c/lrn_layer

CSRCS = init.c
CSRCS += lrn_layer.c

CSRCS1 = $(notdir $(CSRCS))
COBJS_ = $(CSRCS1:.c=.o)

include $(RTEMS_MAKEFILE_PATH)/Makefile.inc
include $(RTEMS_CUSTOM)
include $(PROJECT_ROOT)/make/leaf.cfg
#XCFLAGS += -I../../include
COBJS = $(COBJS_:%=${ARCH}/%)

OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS)

#all: ${ARCH} $(PGM) RUNTCL
all: ${ARCH} $(PGM)

$(PGM): $(OBJS)
$(make-exe)

RUNTCL:
echo 'system_init' > run.tcl
echo 'load_image o-optimize/faster_rcnn.exe' >> run.tcl
echo 'run $(_RAM_START)' >> run.tcl

clean:
-$(RM) -r $(ARCH)

../src/init.c:

...
#include <math.h>

rtems_status Init(rtems_argument ignored)
{
...
printf(" pow(1.1,2.2) = %f\n", powf(1.1,2.2)); // <== powf compiles liks ok
//zf_coco();

}

../../../../abfrcnn/bare-c/lrn_layer/lrn_layer.c

#include <stdio.h>
#include <math.h>

int lrn_layer(... args... )
{

...
val = 1./powf((1.+a/(float)(k^2)*tmp),b); // method1
...
} // main ROI loop

make的结果命令:

test -d o-optimize || mkdir o-optimize
sparc-ab-rtems-gcc --pipe -B/home/ckim/prj/abts/rtems-qt/rtems-4.10.99-kernel/build-rtems/rtems-package/sparc-ab-rtems/aldebaran2/lib/ -specs bsp_specs -qrtems -Wall -qnolinkcmds -T ../../lib/linkcmds.abts3 -D_RAM_START=0x60000000 -lm -DALDEBARAN_RTEMS -O4 -mtune=v8 -msoft-float -fcommon -DTARGET_ALDEBARAN -c -o o-optimize/init.o ../src/init.c
../src/init.c:120:2: warning: missing braces around initializer [-Wmissing-braces]
{0}, // rtems_chain_control;
^
../src/init.c:120:2: warning: (near initialization for 'ald_sd_card_driver_table[0].queue.Chain') [-Wmissing-braces]
sparc-ab-rtems-gcc --pipe -B/home/ckim/prj/abts/rtems-qt/rtems-4.10.99-kernel/build-rtems/rtems-package/sparc-ab-rtems/aldebaran2/lib/ -specs bsp_specs -qrtems -Wall -qnolinkcmds -T ../../lib/linkcmds.abts3 -D_RAM_START=0x60000000 -lm -DALDEBARAN_RTEMS -O4 -mtune=v8 -msoft-float -fcommon -DTARGET_ALDEBARAN -c -o o-optimize/lrn_layer.o ../../../../abfrcnn/bare-c/lrn_layer/lrn_layer.c
../../../../abfrcnn/bare-c/lrn_layer/lrn_layer.c: In function 'lrn_layer':
../../../../abfrcnn/bare-c/lrn_layer/lrn_layer.c:201:12: warning: 'w_idx' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (w_idx == w && h_idx == h) {
^
sparc-ab-rtems-gcc --pipe -B/home/ckim/prj/abts/rtems-qt/rtems-4.10.99-kernel/build-rtems/rtems-package/sparc-ab-rtems/aldebaran2/lib/ -specs bsp_specs -qrtems -Wall -qnolinkcmds -T ../../lib/linkcmds.abts3 -D_RAM_START=0x60000000 -lm -DALDEBARAN_RTEMS -O4 -mtune=v8 -msoft-float -fcommon -DTARGET_ALDEBARAN -L/opt/abde-rtems/lib/gcc/sparc-ab-rtems/4.8.2/soft -L/opt/abde-rtems/sparc-ab-rtems/lib/soft -mtune=v8 -msoft-float -fcommon -DTARGET_ALDEBARAN -o o-optimize/faster_rcnn.exe o-optimize/init.o o-optimize/lrn_layer.o
o-optimize/lrn_layer.o: In function `lrn_layer':
lrn_layer.c:(.text+0x4a8): undefined reference to `powf'
collect2: error: ld returned 1 exit status
make: *** [o-optimize/faster_rcnn.exe] Error 1

最佳答案

编译过程由每个单独的.c 文件的编译和最终链接组成。我发现通过 XCFLAGS 添加的 -lm 选项以某种方式应用于编译命令,但没有应用于链接命令。因此,我在对象列表中添加了 -lm 选项,以便该选项自然地位于链接命令中的对象列表之后。 (我想正确的方法是将 -lm 添加到 XLDFLAG,因为我在 rtems 构建树中找到了变量:额外的 LD 标志)。我稍后会尝试..

OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS) -lm

关于c - 在 rtems 中使用 powf 函数(对 powf 的 undefined reference ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40561937/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com