2017-08-22 70 views
7

için geçen argümanlar ben http://asquera.de/blog/2017-04-10/the-path-to-rust-on-the-web/pas, WebAssembly ve artan toplam belleğin

Proje derler başına webasm için derleme ediyorum bir pas projesi var./Aracı inşa zincirini rustc için şu bayrakları nasıl geçirileceği berrak değil,

abort("Cannot enlarge memory arrays. Either (1) compile with -s 
TOTAL_MEMORY=X with X higher than the current value 16777216, (2) compile 
with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, 
... 

Sorun: Ben Chrome Canary'nin bunu çalıştırdığınızda, belleği bitene ve bana çok yardımcı hata mesajı verir.

Ne EMMAKEN_CFLAGS veya aşağıdaki çalışmayı ayarı:

cargo rustc -v --target=wasm32-unknown-emscripten --release -- -Clink-args="-s TOTAL_MEMORY=33554432" 

cevap

3

This blog yazısı ben de sizin durumunuzda uygulanabilir düşünüyorum bir çözüm sunmaktadır:

Ben orada Anlayacağınız gibi en iyi olarak Bağlayıcı argümanların çoğunu kargo yoluyla geçmenin yolu yoktur. Bunun yerine, gerçek bağlayıcıyı sarmalayan bir kabuk betiği olan özel bir bağlayıcı belirterek sınırlamayı aşın.

emcc "-s" "TOTAL_MEMORY=33554432" [email protected] 

(.. Bunu çalışması için başka seçenekler gerekebilir detaylar için blog post edin)

Ve:

uygun seçeneklerle emscripten çağıran emcc_link gibi bir shell script oluşturun projenizde onu düzenlemek için .cargo/config:

Yapı ortamının Linux ya da benzeri olduğunu acımasızca kabul ettim. Windows'ta kabuk betiği muhtemelen bir toplu iş komut dosyası olmalıdır ve .cargo/config'da herhangi bir farklılık olup olmadığından emin değilim.

Sorumluluk reddi: Bunlardan hiçbirini denemedim.

+0

Bu işe yaramıyor. Ama emin olmak için biraz kazmaya ihtiyacım var. Özellikle, özel bağlayıcı hiçbir zaman proje dizini – imichaelmiers

+0

proje dizininde bir .cargo/config ile çağrılır. Bu, hata ayıklaması zor .. kargo, geçerli bir Toml olduğu sürece yapılandırma dosyasındaki geçersiz ayarlardan şikayet etmez. Bağlayıcıyı doğrudan -c linker = 'ile paskaya geçirirseniz ne olur? – kazemakase