Visual Studio C++ связывает неиспользуемые глобальные переменные

У меня есть mylib.lib:

//mylib.h:
int foo();

//mylib.cpp:
#include "mylib.h"

const int arr[] = {1, 2};

int foo() {
    return arr[0];
}

И proxylib.lib:

//proxylib.h:
int bla1();
int bla2();

//proxylib.cpp:
#include "../mylib/mylib.h"
#include "proxylib.h"

int bla1() {
    return 2;
}

int bla2() {
    return foo();
}

и exe-проект:

//main.cpp
#include "../proxylib/proxylib.h"
#include <iostream>

int main() {
    std::cout << bla1();
    return 0;
}

Основной проект имеет ссылку на проект proxylib.lib, а проект proxylib имеет ссылку на проект mylib.lib. После компиляции и связывания проекта с финальным exe-файлом я получил неиспользуемую глобальную переменную "arr" из mylib.lib в exe, хотя функции "foo" в exe нет. ЗАЧЕМ?

Спасибо!

1 ответ

main.cpp вызывает bla1(), объявленный в proxlib.h. Proxlib.h включает mylib.h, функции которого определены в mylib.cpp, так что это тоже компилируется.

Другие вопросы по тегам