奇怪的链接行为 - gcc 库
Wierd linkage behavior - gcc libraries
我有两个库 libA、libB 和一个应用程序 'app'。
libB 使用 libA 中的函数,'app' 使用两个库中的符号。
我添加了两个新函数 - 'print_data' 和 'print_data_char' 到我只在 libB 中调用的 libA,现在得到:
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 可以识别的其他符号。好像只少了两个新符号。
有什么想法吗?
提前致谢。
Ghosh 的回答:-lA -lB -lA -lB 已修复 :)
(我花了大约一个小时才明白这不是错字)
显然链接时 lib 顺序很重要。参见:
事实上我相信甚至 -lB -lA 也能解决它:)
谢谢!
我有两个库 libA、libB 和一个应用程序 'app'。 libB 使用 libA 中的函数,'app' 使用两个库中的符号。 我添加了两个新函数 - 'print_data' 和 'print_data_char' 到我只在 libB 中调用的 libA,现在得到:
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 可以识别的其他符号。好像只少了两个新符号。
有什么想法吗?
提前致谢。
Ghosh 的回答:-lA -lB -lA -lB 已修复 :)
(我花了大约一个小时才明白这不是错字)
显然链接时 lib 顺序很重要。参见:
事实上我相信甚至 -lB -lA 也能解决它:)
谢谢!