GCC4.1.2, GCC6.3.0, используя "-fPIE -Wl, -pie" - PullRequest
0 голосов
/ 24 октября 2019

Допустим, у меня есть проект, в котором есть библиотека, в которой у меня есть одна функция, которая возвращает одно значение, например:

unsigned long cFun1()
{
    return 1000;
}

Затем у меня есть макет функции в главном. cpp, с тем же именем, и разница в том, что он возвращает какой-то другой результат, например:

unsigned long cFun1()
{
    return 45;
}

Итак, в основном я вызываю простую функцию, подобную этой:

int main()
{
    long retVal = cFun1();

    return 0;
}

Когда я использую компоновщик как:

**link_command:**%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
    ld -shared -z defs --exclude-libs ALL %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
    %{s} %{t} %{u*} %{x} %{z} %{Z} \
        %{L*} %(link_libgcc) %o \
    %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}

, вызывается функция, находящаяся в библиотеке, что мне не нужно. Что я хочу сделать, это вызвать mocked-функцию, которая находится в main.cpp. Для этого я добавляю следующие флаги: -fPIE -Wl, -pie

Компиляция приложения с этими флагами приводит к вызову фиктивной функции, которая находится в main.cpp и возвращает 45, но при этом появляются предупреждениякомпиляция: Переменная retVal объявлена, но не используется в текущей конфигурации.

Итак, вопрос в том, есть ли способ удалить эти предупреждения при использовании "-fPIE -Wl, -пирог "флаги? Или есть какой-то другой способ использования фиктивной функциональности, кроме использования упомянутых флагов?

...