【发布时间】:2011-08-24 17:53:57
【问题描述】:
你好 Stack Overflow 社区,
我正在开发一个 c 项目,将多个 c 程序交错到一个二进制文件中,该二进制文件可以将交错的程序作为踏板或叉子运行以进行基准测试。
因此,我在所需程序的每个程序文件夹中运行 make,并将所有带有“ld -r”的 .o 文件预链接到一个新的 .o 文件。之后,我为每个“大”.o 文件添加了一个特定的命名函数,它除了运行每个程序的 main() 并提供 argc 和 argv 之外什么都不做。然后我使用 objcopy 对每个全局符号进行本地化,除了未知符号和我的特定函数之一,它将运行 main()。最后,我将这些经过处理的 .o 文件与我的程序链接在一起,该程序将特定的命名函数作为线程、分叉或另一个运行。
现在我的问题/问题: 我遇到了静态库的问题。我使用 ffmpeg 进行测试,它构建静态库,例如 libavcodc 和 libavutil 等。不幸的是,“ld -r”不链接 .a 文件。所以我尝试使用 ar -x 提取这些库,然后以上述方式将提取的 .o 文件链接到“大”新 .o 文件。但我没有工作,因为 libavcodec 和 libavutil 都包含文件 ff_inverse.o。当我只是构建 ffmpeg 时,这显然不是问题,它将链接这些静态库。但是,两个库都包含它,所以必须有一个机制来做出选择,使用和链接哪个 ff_inverse.o。所以我的问题:这是如何工作的?区别在哪里?
【问题讨论】: