构建一个可执行文件并不重要。您首先需要遵守目标操作系统的ABI,以便它可以找到您的程序的入口点。下一步将决定你的程序如何能够访问系统资源:可能你会希望你的可执行文件实现动态链接,以便它可以访问共享库,并且你需要加载各种.dll或者.dll文件。所以你需要的文件。您需要为此编写的所有说明将随操作系统而变化,您可能需要引入逻辑来检测确切的平台并做出明智的决策,而且您需要改变32位和64位。
此时您已准备好开始为游戏发布机器说明。
这里的一个合理的替代方法是(由Unity完成)为您的引擎提供一个“空白”可执行文件。你的引擎本身就是一个共享库(.dll或.so),空白的可执行文件只是一个加载共享库的包装器,并在其中调用一个指向其数据部分的指针的函数。
生成您的用户可执行文件将包括加载适当的空白文件,对其进行特定于平台的修改,以告知其打算提供的数据部分的大小,并以适当的格式编写数据。或者,你可以简单地拥有一个具有在其中你写值的原始结构的嵌入式副本,就像在内存填充一个struct空白:
struct GameDefinition {
constexpr size_t AuthorNameLen = 80;
char author_[AutherNameLen+1];
constexpr size_t PublisherNameLen = 80;
char publisher_[PublisherNameLen+1];
constexpr size_t GameNameLen = 80;
char name_[GameNameLen+1];
constexpr size_t QuestionLen = 80;
constexpr size_t AnswerLen = 80;
char question_[QuestionLen+1];
char answer_[AnswerLen+1];
};
static GameDefinition gameDef;
#include "engine_library.h" // for run_engine
int main() {
run_engine(&gameDef);
}
你会编译这个againsst共享库存根您的引擎,并将其作为可执行文件发布,然后查找可执行文件的平台特定细节,找到其中的“gameDef”的位置。你会将空白读入内存,然后用基于用户输入的代码替换“gameDef”的定义。
但是很多引擎做的仅仅是运输或要求用户安装一个编译器(团结依靠C#)。因此,他们不必调整可执行文件并完成所有这些疯狂的平台特定的工作,而只需输出一个C/C++程序并编译它。
// game-generator
bool make_game(std::string filename, std::string q, std::string a) {
std::ostream cpp(filename + ".cpp");
if (!cpp.is_open()) {
std::cerr << "open failed\n";
return false;
}
cpp << "#include <engine.h>\n";
cpp << "Gamedef gd(\"" << gameName << "\", \"" << authorName << \");\n";
cpp << "int main() {\n";
cpp << " gd.q = \"" << q << \"\n";
cpp << " gd.a = \"" << a << \"\n";
cpp << " RunGame(gd);\n";
cpp << "}\n";
cpp.close();
if (!invoke_compiler(filename, ".cpp")) {
std::cerr << "compile failed\n";
return false;
}
if (!invoke_linker(filename)) {
std::cerr << "link failed\n";
return false;
}
}
如果“RunGame”是不是你的发动机的一部分,但用户提供的,那么你可以发出,作为CPP代码的一部分。否则,这里的意图是它打电话到你的图书馆。
在Linux下你可能会
g++ -Wall -O3 -o ${filename}.o ${filename}.cpp
编译这个,然后
g++ -Wall -O3 -o ${filename} ${filename}.o -lengine_library
把它和你的引擎的链接库。
您是否尝试将客户的数据放入数据文件而不是可执行文件? –
为什么你想把这个琐事当作可执行文件?你要*执行琐事数据吗? *(通常,数据不会被执行,而是被程序读取或写入。)* –
数据文件可以与可执行文件一起安装。许多安装程序可以创建包含可执行文件和数据文件的安装。 –