2017-02-22 17 views
8

Yaklaşık 17 kb uzunluğunda bir bilgi dizim var. Programım bu dizeyi oluşturmayacak veya bir arabelleğe okuyamayacaktır - veri zaten başlatılmış, kodumda olduğu gibi derlenmesini istiyorum, statik bir değişken gibi. Üstelik, benim çalışmamın içinde olmasını ve bir proje dosyası içinde saklanmamasını tercih ederim. Daha önce hiç böyle bir sorunla karşılaşmadım, bunun için en iyi yol nedir? Kaynak olarak dahil olmalı mıyım, yoksa muazzam veri akışını bir değişkene tam anlamıyla kopyalayıp yapıştırmalı mıyım? Ne önerirsiniz? C++ 'da Çok Büyük Statik Değişkenlerin Saklanması

VisualStudio C++ 2015 kullanıyorum, söz unuttum o GNU bağlayıcı ld yeteneği vardır

+3

Çubuk Eğer erişebilmek bir bir başlığında bir extern koymak dosya. Bu sayede iyi bir yapı ortamı yeniden inşa edilmeye devam etmeyecek. – user4581301

+0

Bunun başka bir dosyada depolanmasını gerektirir, dosyaların yanlış yerleştirilmesi riskini istemiyorum ve doğrudan .exe dosyasının içine yerleştirme yeteneğini tercih ederim. – DudeDudeDude

+3

@ DudeDudeDude Başka bir ** '.cpp' ** dosyasında yine de derlenecek ve onu atlayamayacağınız anlamına gelir, size bağlantı hataları verir. – Angew

cevap

3

doğrudan bir nesne dosyasının .data bölüm olarak özel verilerini dahil konularda: Oluşan

ld -r -b binary -o example.o example.txt 

example.o dosyada, gömülü verilerin başlangıcına ve sonlarına erişmek için tanımlanan semboller vardır (bunların nasıl adlandırıldığını görmek için yalnızca dosyaya objdump ile bakın).

Artık Visual Studio ile birlikte gelen linker'in benzer bir yeteneğe sahip olup olmadığını bilmiyorum, ancak GNU linker'ını mingw veya cygwin aracılığıyla kullanabileceğinizi tahmin ediyorum (oluşturulan nesne dosyası standarda başvurmadığından lib cygwin ile gelen emülasyon lib dosyasına ihtiyacınız olmayacaktır. Sonuçta ortaya çıkan nesne dosyası apparently can just be added to your sources like a regular source file.

: Veri değişiklikler sıklıkla ...

Alternatif gibi bir C dizesinde dosyasının içeriğini koyar basit bir program yazabilirsiniz eğer Tabii

bu kılavuzu iş akışı çok iyi değil

unsigned char const * const data = { 
    0x12, 0x34, 0x56 }; 

Elbette zaten böyle bir program var (xdd) ama sizin için uygun olup olmadığını bilmiyorum. Bir potansiyel sorun, reach the limit for the length of string literals that way olabilir. Etrafında dolaşmak için (çok boyutlu) bir char dizisini deneyebilirsiniz.

(I this blog post çok yararlı buldum bu cevabı yazarken.) Başka bir cpp'de içinde

İlgili konular