Мне нужно скомпилировать и связать некоторый код во время выполнения. Я использую подход, предложенный здесь: https://stackoverflow.com/a/10565120/3038460Компиляция во время выполнения и #include собственный заголовок в C++
В основном я пишу свой код в файл .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
}
Что самое лучшее решение, чтобы решить эту проблему?
Ваша цель не иметь остальной доступный исходный код на самом деле несовместима с разработкой C/C++ , Обычно вам необходимо включить заголовки, потому что вам нужен доступ к определениям типов данных и/или прототипам функций, которые определяют интерфейсы, которые вы хотите использовать. Если эти заголовки недоступны, компилятор не знает, как скомпилировать фрагмент кода, который вы ему даете. C/C++ не предназначены для инкрементальной компиляции, когда доступны только двоичные файлы. –
Хорошо ... поэтому я предполагаю, что единственный способ - напечатать содержимое заголовка непосредственно внутри 'mysource.cpp', взяв его из стробированной строки или скопировать исходный файл со сценарием, как это предлагает @ Z̷͙̗̻͖̣̹͉̫̬̪̖̤͆ͤ̓ͫͭ̐͜͞αлγo – Marco