gpt4 book ai didi

c - 如何在 SDK 的交叉编译器中访问 -ldl

转载 作者:太空宇宙 更新时间:2023-11-04 12:17:24 26 4
gpt4 key购买 nike

我正在使用带有交叉编译器的 Xilinx SDK 作为 aarch64-none-elf-gcc我正在我的程序中加载一个共享库,但出现错误

Building target: fsbl.elf
Invoking: ARM v8 gcc linker
aarch64-none-elf-gcc -L"/proj/ssw_xhd/boot/balakrish/workspace/hello_world/Debug" -Lwrk/released/2017.3/GA/2017.3_1005_1/installs/lin64/SDK/2017.3/gnu/aarch64/lin/aarch64-none/bin/../lib/gcc/aarch64-none-elf/6.2.1/../../../../aarch64-none-elf/bin/ld -Wl,-T -Wl,../src/lscript.ld -L../../fsbl_bsp/psu_cortexa53_0/lib -o "fsbl.elf" ./src/psu_init.o ./src/xfsbl_authentication.o ./src/xfsbl_board.o ./src/xfsbl_bs.o ./src/xfsbl_csu_dma.o ./src/xfsbl_dfu_util.o ./src/xfsbl_exit.o ./src/xfsbl_handoff.o ./src/xfsbl_hooks.o ./src/xfsbl_image_header.o ./src/xfsbl_initialization.o ./src/xfsbl_main.o ./src/xfsbl_misc.o ./src/xfsbl_misc_drivers.o ./src/xfsbl_nand.o ./src/xfsbl_partition_load.o ./src/xfsbl_plpartition_valid.o ./src/xfsbl_qspi.o ./src/xfsbl_rsa_sha.o ./src/xfsbl_sd.o ./src/xfsbl_translation_table.o ./src/xfsbl_usb.o -lhello -Wl,--start-group,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilffs,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilsecure,-lxil,-lgcc,-lc,--end-group -Wl,--start-group,-lxilpm,-lxil,-lgcc,-lc,--end-group -n
/tmp/ccjtx6CQ.ltrans0.ltrans.o: In function `main':
<artificial>:(.text.startup+0x18c): undefined reference to `dlopen'
<artificial>:(.text.startup+0x18c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `dlopen'
<artificial>:(.text.startup+0x19c): undefined reference to `dlsym'
<artificial>:(.text.startup+0x19c): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `dlsym'
<artificial>:(.text.startup+0x1a4): undefined reference to `library_function'
<artificial>:(.text.startup+0x1a4): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `library_function'
<artificial>:(.text.startup+0x1ac): undefined reference to `dlclose'
<artificial>:(.text.startup+0x1ac): relocation truncated to fit: R_AARCH64_CALL26 against undefined symbol `dlclose'
collect2: error: ld returned 1 exit status
make: *** [fsbl.elf] Error 1

最后我的问题是如何在交叉编译中加载-ldl如果我在 C/C++ Build settings-.libraries->library paths 中使用 -ldl 。我得到的错误是

/wrk/released/2017.3/GA/2017.3_1005_1/installs/lin64/SDK/2017.3/gnu/aarch64/lin/aarch64-none/bin/../lib/gcc/aarch64-none-elf/6.2.1/../../../../aarch64-none-elf/bin/ld: cannot find -ldl
collect2: error: ld returned 1 exit status
make: *** [fsbl.elf] Error 1

最佳答案

您的答案的不同部分似乎有冲突。

dlopendlsym 和 friend 用于从文件系统上的另一个文件 加载代码。换句话说,这些函数与在运行时从目标平台文件系统和操作系统上可用的库加载代码有关。

在交叉编译的情况下,工具链需要提供实现这些功能的库(libdl.solibdl.a)。工具链提供具有相关操作系统调用的代码,以使用代码打开文件,将其映射到内存并将其链接到正在运行的程序。

这就是冲突发挥作用的地方。您提到的工具链似乎是裸机 工具链。换句话说,这是一个直接在芯片上运行你的代码的工具链,没有操作系统。如果您没有操作系统,很明显您不能使用它来在运行时加载更多代码。

考虑到这一点,工具链没有为您提供合适的 libdl.a 实现的原因就很明显了。它不能在平台上通用实现。

关于c - 如何在 SDK 的交叉编译器中访问 -ldl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47053886/

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