Сообщество Hello Stack Overflow,
Я работаю над проектом c, чтобы чередовать несколько программ на c в один двоичный файл, который может запускать программы с чередованием в виде ступеней или вилок для целей бенчмаркинга.
Поэтому я запускаю make в каждой папке нужных программ и предварительно связываю все файлы .o с помощью «ld -r» в один новый файл .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 использовать и связывать. Итак, мой вопрос: как это работает? В чем разница?