奇怪的链接行为 - gcc库

时间:2016-03-03 10:27:55

标签: c compilation compiler-errors linker linker-errors

我有两个库libA,libB和一个应用程序' app'。 libB使用来自libA和' app'的函数。使用两个库中的符号。 我添加了两个新功能 - ' print_data'和' print_data_char'到libA,我只在libB中调用,现在得到:

undefined reference to 'print_data'
undefined reference to 'print_data_char'

这是实际的命令

arceb-linux-gcc apps/applications/dpi/dpi_app/build/Obj_linux_arc_sim/src/main.o apps/applications/dpi/dpi_app/build/Obj_linux_arc_sim/src/utl.o ./dpe/dp/lib/ezdp_linux_arc_sim.a ./dpe/sft/lib/sft_linux_arc_sim.a ./dpe/dpi/lib/dpi_linux_arc_sim.a  -O2 -o apps/applications/dpi/dpi_app/bin/ezdpi_app_linux_arc_sim

libA = sft_linux_arc_sim.a

libB = dpi_linux_arc_sim.a

我用nm检查了libA:

ezpacket_internal.o:
00000001 a __ARCCOMPACT__
         U __udivsi3
         U fprintf
         U fputc
         U fputs
         U fwrite
0000001c T print_data
00000000 T print_data_char

libA中还有其他符号可供libB识别。似乎只缺少两个新符号。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

Ghosh的回答: -lA -lB -lA -lB 修复了它:)

(我花了大约一个小时才明白这不是一个错字)

显然,链接时lib命令很重要。请参阅:https://stackoverflow.com/questions/45135/...

事实上,我相信即使 -lB -lA 也能解决它:)

谢谢!