我正在尝试使用 libav 库中的 FFT 代码。由于代码是 LGPL,我需要将其链接为动态库,但链接器似乎无法解析某些符号:
gcc -g -fPIC fft-test.c -I. -L. -lavutil -lavcodec -lm -o fft_test
给我以下错误:
fft-test.c:319: undefined reference to `ff_fft_init'
但是与库的 .a 版本链接可以正常工作:
gcc -g -fPIC fft-test.c -I. -L. -lavutil -l:libavcodec.a -lm -o fft_test
libavcodec.so 文件的 objdump 显示 ff_fft_init 已定义:
000000000002f146 l F .text 0000000000000229 ff_fft_init
.a 版本的 objdump 看起来也不错:
00000000000000ed g F .text.unlikely 0000000000000229 ff_fft_init
我尝试在链接命令中交换库的顺序以及使用-Wl,--start-group
and-Wl,--end-group
选项。没运气。
那么我在这里错过了什么?有任何想法吗?