未定义的归档函数引用

时间:2015-04-16 01:37:43

标签: c++ gcc linker

我收到旧的"未定义的"使用以下代码

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 ........)是一大堆目标文件。

2 个答案:

答案 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

到适当的头文件,它找到了函数。

感谢您的帮助