如何解决链接库顺序问题?

Art*_*bin 4 c linker gcc

我正在尝试编译一个需要使用多个库的C程序.问题是,库链接的顺序会导致编译失败.

无论如何要让GCC找出正确的订单,或者让我找出正确的订单而不必尝试各种可能性?

mipsel-linux-gcc ffmpeg_mips_test.c -o ffmpeg_mips_test -Wall -v -I/ffmpegMIPS/includeffmpegMIPS/
                 -L/ffmpegMIPS/libffmpegMIPS/ -lavformat -lavcodec -lavutil -lswscale -lm -lpthread
Run Code Online (Sandbox Code Playgroud)

我现在这样做的方式是从一开始,然后在错误发生时添加更多库,但有时它感觉就像进步一样,有时它似乎只是我走到了死胡同.

[编辑]由于未定义的引用,编译失败[/ edit]

Sie*_*geX 8

你有几个选择

1)您可以向具有依赖项的库添加其他调用

2)您可以使用如下--start-group / --end-group选项:

mipsel-linux-gcc ffmpeg_mips_test.c -o ffmpeg_mips_test -Wall -v -I/ffmpegMIPS/includeffmpegMIPS/
-L/ffmpegMIPS/libffmpegMIPS/ -Wl,--start-group -lavformat -lavcodec -lavutil -lswscale -Wl,--end-group -lm -lpthread
Run Code Online (Sandbox Code Playgroud)

以下是ld描述其用法的联机帮助页条目

将重复搜索指定的归档,直到未创建新的未定义引用.通常,只按命令行中指定的顺序搜索存档一次.如果需要该存档中的符号来解析稍后在命令行中显示的存档中的对象引用的未定义符号,则链接器将无法解析该引用.通过对存档进行分组,可以反复搜索所有存档,直到解决所有可能的引用.