我收到旧的"未定义的"使用以下代码
BYTE byteT = '0';
DSTATUS diskStatus = disk_initialize(byteT);
确切的错误是:
fileSystemController.cpp:13: undefined reference to `disk_initialize(unsigned char)'
此函数在名为libxilffs.a的存档文件中定义。该存档文件由两个目标文件ff.o和diskio.o组成。
我可以调用ff.o目标文件中的所有函数,但我不是diskio.o目标文件中定义的任何函数
我在存档上运行了nm,这是输出
ff.o:
00000000 b .LANCHOR0
00000000 r .LANCHOR1
00000000 r .LC0
U __aeabi_uidiv
000000d8 t check_fs
00000190 t chk_mounted
00000f50 T clust2sect
0000087c t create_chain
000009ec t dir_next
00000bd8 t dir_sdi.constprop.6
U disk_initialize
U disk_ioctl
U disk_read
U disk_status
U disk_write
00000000 r excvt.5690
00001a58 T f_close
00001a70 T f_lseek
00000fb4 T f_mount
00000ff0 T f_open
00001cc8 T f_opendir
0000134c T f_read
00001d74 T f_readdir
00001874 T f_sync
00001594 T f_write
00000000 b FatFs
00000cd0 t follow_path
00000004 b Fsid
00000f74 T get_fat
00000610 t get_fat.part.4
U get_fattime
00000000 t move_window
00000f94 T put_fat
00000728 t put_fat.part.5
000005d0 t validate
diskio.o:
00000000 b .LANCHOR0
00000048 T disk_initialize
00000208 T disk_ioctl
0000019c T disk_read
00000000 T disk_status
00000264 T disk_write
00000200 C ExtCsd
00000258 T get_fattime
00000020 b SdInstance
00000000 b Stat
U Xil_In32
U XSdPs_CfgInitialize
U XSdPs_Change_BusSpeed
U XSdPs_Change_BusWidth
U XSdPs_Change_ClkFreq
U XSdPs_Get_BusSpeed
U XSdPs_Get_BusWidth
U XSdPs_LookupConfig
U XSdPs_Pullup
U XSdPs_ReadPolled
U XSdPs_SdCardInitialize
U XSdPs_Select_Card
U XSdPs_SetBlkSize
U XSdPs_WritePolled
正如你所看到的,在归档文件中定义了disk_initialize函数...但是我无法使用它,我得到了fileSystemController.cpp:13:未定义引用`disk_initialize(unsigned char)'。
所以我的问题是,当其他部分可用时,是否存在部分归档文件对我不可用的方法?
这是我的命令行编译内容:
arm-xilinx-eabi-g++ -Wl,-T -Wl,../src/lscript.ld -L../../standalone_bsp_0/ps7_cortexa9_0/lib -o "ABC.elf" obfile1.o ........ -Wl,--start-group,-lgcc,-lc,-lstdc++,-lxilffs,-lxil,--end-group
其中(bfile1.o ........)是一大堆目标文件。
答案 0 :(得分:0)
如您所见,存档文件中定义了disk_initialize函数
我看不到它。 nm
显示状态disk_initialize U
,表示“符号未定义”refer to nm docs please
整个案例是:你的libxilffs.a
引用了这个函数(甚至可能在里面的某个地方使用它)但是既没有导出,也没有定义它。
首先,你需要弄清楚这个功能应该来自哪里。
P.S。并切换心灵感应模式。我可能会建议你看一下FatFs库,里面的函数非常相似。
答案 1 :(得分:0)
所以n.m有写回答我添加了
#ifdef __cplusplus
extern "C" {
#endif
到适当的头文件,它找到了函数。
感谢您的帮助