Компиляция во время выполнения и #include пользовательский заголовок в переполнении стека

Мне нужно скомпилировать и связать некоторый код во время выполнения. Я использую подход, предложенный здесь: 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
}

Как лучше всего решить эту проблему?

1

Решение

Сгенерируйте содержимое этого заголовочного файла в сгенерированный исходный файл.

Технически, #include Директива — это просто директива для включения полного содержимого заголовочного файла в тело исходного файла (в частности, в тот момент, когда вы его включили) во время компиляции. Таким образом, вы можете пропустить посредника и сгенерировать содержимое этого заголовочного файла в исходный файл перед его компиляцией вместо #include

0

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


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