2015-02-26 7 views
0

У меня есть простая библиотека C++, которая использует короткий autoconf, automake и libtool для создания объекта общей библиотеки.Могу ли я извлечь конфигурацию libtool из automake/autoconf для отдельного использования?

Теперь я хочу, чтобы иметь возможность динамически компилировать новый код во время выполнения в моей программе, с помощью:

  • кода вывода во временный файл (скажем /tmp/code.cc)
  • Compile в библиотеку
  • Динамически загрузки code.so в мой код

Я хочу найти команды, мне нужно бежать, чтобы сделать это. Я могу видеть команды, используемые при запуске 'make -n', но я действительно не хочу пытаться использовать awk для поиска и замены бит этих команд!

ответ

2

Эту проблему можно разложить на следующие подзадачи:

  • Определите, как вы собрали саму программу (компилятор и/или флаги не должны смешиваться, особенно не в случае языка C++) , Вы можете сделать это с помощью экспорта CC, CXX, CFLAGS, CXXFLAGS и CPPFLAGS в файл config.h используя AC_DEFINEautoconf макрос в configure.ac. Или вы можете использовать AC_SUBST и свой собственный header.h.in, чтобы сохранить эти переменные в файле по вашему выбору.

  • Затем вызывается компилятор CC давая ему CPPFLAGS и CFLAGS или CXX с CPPFLAGS и CXXFLAGS. Однако, если вы хотите загрузить эти файлы своей программой, вы можете использовать библиотеку Libtool под названием libltdl, которая реализует плагины в кросс-платформенном виде.

  • Вы можете рассмотреть возможность использования libtool сценария в качестве кросс-платформенной компиляции обертке, но вам придется study это немного, так как это как-то аркан - есть компиляция, связь и «установка» фазы, но они обрабатываются в кросс-платформенный способ, и если вы передадите аргумент -sharee, некоторые дополнительные флаги, которые вам нужны (-fPIC и, возможно, другие), будут переданы автоматически.

+0

Ваш ответ убедил меня, что эта проблема достаточно сложная. Я займусь проблемой по-другому, но я верю, что ваш ответ правильный, если кто-то еще достаточно храбр, чтобы сделать это! –