teivaz के विचार पर बिल्डिंग संभाल लेंगे, मुझे आश्चर्य है अगर हमेशा की तरह "stringize विस्तार के बाद" चाल काम करेगा:
#define STRINGIZE(...) #__VA_ARGS__
#define EXPAND_AND_STRINGIZE(...) STRINGIZE(__VA_ARGS__)
constexpr std::string shader_source = EXPAND_AND_STRINGIZE(
#include "~/.foo.glsl"
);
फिर भी, मैं एक पारंपरिक extern const char[]
लिंकर द्वारा सामग्री के लिए घोषित घोषणा के लिए जाना होगा।
# objcopy --input binary \
--output elf32-i386 \
--binary-architecture i386 data.txt data.o
स्वाभाविक रूप से आप --output
और --binary-architecture
आदेशों अपने मंच से मिलान करने बदलना चाहिए: लेख "Embedding a File in an Executable, aka Hello World, Version 5967" एक उदाहरण है। ऑब्जेक्ट फ़ाइल से फ़ाइल नाम प्रतीक नाम में समाप्त होता है, इसलिए आप इसका उपयोग इस प्रकार कर सकते हैं:
#include <stdio.h>
/* here "data" comes from the filename data.o */
extern "C" char _binary_data_txt_start;
extern "C" char _binary_data_txt_end;
main()
{
char* p = &_binary_data_txt_start;
while (p != &_binary_data_txt_end) putchar(*p++);
}
स्रोत
2014-10-02 13:14:04
यह * लोड * द्वारा आप जो भी पहनते हैं उस पर निर्भर करता है। मुझे पता है कि एकमात्र समाधान '# शामिल' है, और इसका मतलब है कि फ़ाइल की सामग्री को कंपाइलर द्वारा समझा जाना चाहिए। –
जो आप शायद चाहते हैं वह बाह्य परिवर्तनीय घोषणा है, जो लिंकर द्वारा वास्तविक डेटा से मेल खाया जाएगा। उस उपकरण के साथ संयोजित करें जो किसी ऑब्जेक्ट फ़ाइल में अपनी पसंद के निर्यात किए गए प्रतीक के साथ एक मनमानी बाइनरी संसाधन को एम्बेड करता है, और आप सुनहरे हैं। (मैं इस तरह के एक उपकरण का सुझाव दे सकता था, लेकिन आपने यह नहीं बताया कि आप किस टूलचैन का उपयोग कर रहे हैं, और उपकरण ईएलएफ बनाम सीवी बनाम पीई बनाम ऑब्जेक्ट फ़ाइल स्वरूपों के लिए अलग हैं) ध्यान दें कि संसाधन को सी/सी ++ कोड में परिवर्तित करना हेक्साडेसिमल अक्षरों के साथ शुरू की गई एक स्थिर सरणी बहुत धीमी होने की संभावना है, इसलिए सीधे ऑब्जेक्ट फ़ाइल पर जाएं। –
मुझे विश्वास नहीं है कि आपका 'लोड' फ़ंक्शन' कॉन्स्टेक्स 'है। तो पूरी अभिव्यक्ति constexpr नहीं हो सकता है। मुझे नहीं पता कि बाहरी फ़ाइल सामग्री एक constexpr स्ट्रिंग कैसे हो सकती है।एकमात्र तरीका एक उपकरण का उपयोग करना है जो फ़ाइल को सरल लोड करता है और सी/सी ++ कोड उत्पन्न करता है। – Klaus