gpt4 book ai didi

c - gcc 无法在动态库中找到对对象的引用

转载 作者:行者123 更新时间:2023-11-30 17:47:50 24 4
gpt4 key购买 nike

我正在尝试使用 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-Wl,--end-group 选项。运气不好。

那么我在这里错过了什么?有什么想法吗?

最佳答案

我不确定这是否是答案,但可能对您有帮助。

我写了一个最小的可编译示例:

#include <libavcodec/fft.h>

int main(int argc, int* argv[]) {
ff_fft_init(NULL, 0, 0);

return 0;
}

我将其编译在新编译的ffmpeg-2.0.1源代码包的根文件夹中:

$ gcc fft-test.c -I。 -Llibavcodec -Llibavutil -lavcodec -lavutil -lm -o fft_test

它的工作原理正如人们所期望的那样:

$ ls -al fft_test 
-rwxrwxr-x. 1 foo foo 451859 Sep 14 10:49 fft_test

因此,我建议尝试将现有代码精简到最少,当您编译它时,慢慢地逐段添加其余代码,看看它在哪里损坏。

关于c - gcc 无法在动态库中找到对对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com