Мне нужно скомпилировать и связать некоторый код во время выполнения. Я использую подход, предложенный здесь: https://stackoverflow.com/a/10565120/3038460
В основном я пишу свой код в файл .cpp, а затем компилирую
/usr/bin/g++ -shared mysource.cpp -o libname.so
Все отлично работает пока у меня только #include
Заголовки из стандартных библиотек. Но что, если мне нужно использовать собственный класс в «динамическом» коде? Как включить мой собственный заголовок? Файл .cpp временно хранится в том же месте моего двоичного файла, и это может отличаться от расположения моих исходных файлов. Есть ли способ узнать во время выполнения, где был расположен исходный код? Я сомневаюсь.
Более того, я хотел бы, чтобы мой код работал, даже если исходный код недоступен.
Чтобы уточнить, mysource.cpp может выглядеть так:
#include <stdlib.h>
#include <vector>
#include "myheader.h" <---- how can g++ find this file? At runtime,
when I create mysource.cpp, I have no idea
where myheader.h is located
void f(){
// Code
}
Как лучше всего решить эту проблему?
Сгенерируйте содержимое этого заголовочного файла в сгенерированный исходный файл.
Технически, #include
Директива — это просто директива для включения полного содержимого заголовочного файла в тело исходного файла (в частности, в тот момент, когда вы его включили) во время компиляции. Таким образом, вы можете пропустить посредника и сгенерировать содержимое этого заголовочного файла в исходный файл перед его компиляцией вместо #include