Обходной путь, когда -whole-библиотека недоступна

Я пытаюсь скомпилировать в среде, где -Wl,-whole-library флаг не поддерживается (emscripten). Как я могу обмануть, чтобы заставить компилятор включать экспортированные символы? Решение должно соответствовать как можно большему количеству этих свойств:

  • Может применяться к одной библиотеке (я не хочу включать неиспользуемые символы из других библиотек)
  • Может быть автоматически сгенерирован (например, путем извлечения экспортированной таблицы символов с nm?)
  • Будет работать с функциями & функции-члены

Я думал о вычислении файла с чем-то вроде:

int x = (int)(&func_a)+(int)(&func_b)+...;

Но он не работает с функциями-членами, которые не могут быть преобразованы в int (и могут быть приватными).

Есть ли у вас какие-либо идеи ?

1

Решение

Идеи:

  • Используйте флаг —whole-library перед связыванием необходимой вам библиотеки и просто
    после добавления -no-whole-library перед перечислением других библиотек, чтобы только
    тот, который вам нужен, чтобы быть полностью связанным, попробуйте добавить флаг —export-dynamic с помощью компоновщика, который его поддерживает.
  • Затем копайте дорогу nm / objdump / exportmap http://accu.org/index.php/journals/1372 экспортировать / создавать информацию о ссылках и использовать информацию о ссылках http://runtimecompiledcplusplus.blogspot.fr/ для использования экспортированных карт и кода, чтобы вы могли имитировать -Wl в вашем коде.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]