構建一個可執行文件並不重要。您首先需要遵守目標操作系統的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
把它和你的引擎的鏈接庫。
您是否嘗試將客戶的數據放入數據文件而不是可執行文件? –
爲什麼你想把這個瑣事當作可執行文件?你要*執行瑣事數據嗎? *(通常,數據不會被執行,而是被程序讀取或寫入。)* –
數據文件可以與可執行文件一起安裝。許多安裝程序可以創建包含可執行文件和數據文件的安裝。 –