Отключить оптимизацию компилятора для переменной в коде JNI C - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть определение переменной в C-функции Android JNI, которая ничего не делает, кроме как определяет себя как строку.Я хочу, чтобы эта строка появлялась в двоичном файле, но когда я собираю проект, файл .so не содержит строку.

Вот то, что я пробовал в коде C.

#pragma GCC push_options
#pragma GCC optimize ("O0")
const char volatile myString[32] = "Some string that must be there";
#pragma GCC pop_options

Как отключить компилятор от оптимизации определения этой неиспользуемой переменной?

1 Ответ

0 голосов
/ 17 декабря 2018

Я подозреваю, что ваша проблема не с компиляцией, а со ссылками.Линкеры часто пропускают данные, которые не используются, чтобы уменьшить размер двоичного файла.Чтобы проверить это, используйте команду strings или ее эквивалент в файле .o, сгенерированном из вашего файла C: если строка в нем, но не в .so, ваша проблема заключается в связывании.

К сожалению, я не знаю, как обойти эту проблему с помощью команды (ов) компоновщика, потому что все мое программирование на Android C было выполнено с помощью отдельной цепочки инструментов и пользовательской системы сборки.

Самое простое решение - просто скопировать строку во время выполнения.

...