У меня есть main.exe и две библиотеки (Lib1 и Lib2):Есть ли способ пропустить неиспользуемые библиотеки при связывании?
В main.exe:
extern void f3();
int main() {
f3();
}
В lib1.cpp:
extern void f4();
void f2() {
f4();
}
void f3() {
}
В lib2.cpp:
void f4() {
}
Так теоретически, мне нужно только lib1 успешно строить main.exe, потому что только f3()
вызывается main()
.
Тем не менее, я нашел как gcc, так и MSVC, у меня также есть lib2, в противном случае сообщения компоновщика не могут найти f4()
.
Я пробовал флаг компоновщика --as-needed
, но это не поможет. Поэтому мой вопрос: есть ли какой-либо способ (например, флаги компоновщика), который я могу использовать для сборки main.exe успешно без lib2? Предположим, я не могу изменить какой-либо исходный код на C++.
Короткий ответ: нет, нет. –
Предполагая, что вы связываете статические библиотеки, когда линкер связывается с lib1 и видит, что он вызывает f4, он попытается связать lib2. Думаю, вам нужны оба. – Dan
Я думаю, что в формате объектного файла не указаны все зависимости, поэтому он не может указать во время ссылки, что 'f4' не подлежит повторному использованию. – Barmar