実現したいこと
terminal
1emcc fibonacci.c -o fibonacci.html --emrun
で、エラーを出さずにコンパイルしたい。
発生している問題・分からないこと
emccでコンパイルすると、.wasmファイルの管理者権限がないといわれ、コンパイルエラーが出る
エラーメッセージ
error
1emcc fibonacci.c -o fibonacci.html --emrun 2C:\emsdk-main\upstream\bin\llvm-objcopy.exe: error: permission denied 3emcc: error: 'C:/emsdk-main/upstream/bin\llvm-objcopy.exe fibonacci.wasm fibonacci.wasm --remove-section=.debug* --remove-section=producers' failed (returned 1)
該当のソースコード
C
1#include <stdio.h> 2#include <emscripten.h> 3 4int fibonacci(int n) { 5 if (n <= 1) { 6 return n; 7 } 8 return fibonacci(n - 1) + fibonacci(n - 2); 9} 10 11int main(void) { 12 int n; 13 printf("Enter the position of the Fibonacci number to calculate: "); 14 n = emscripten_run_script_int("prompt('Enter the position of the Fibonacci number to calculate:')"); 15 16 if (n < 0) { 17 printf("Invalid input. Please enter a positive number.\n"); 18 return 1; 19 } 20 21 int result = fibonacci(n); 22 printf("The Fibonacci number at position %d is: %d\n", n, result); 23 24 return 0; 25}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleで「emcc wasm denied」で検索しましたが、該当するページは出ませんでした。
Github CopilotとClaude3にコード修正を投げましたが、変更はありませんでした。
補足
emcc --version emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.64 (a1fe3902bf73a3802eae0357d273d0e37ea79898) Copyright (C) 2014 the Emscripten authors (see AUTHORS.txt) This is free and open source software under the MIT license. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
CMAKE verion3.30.2
Windows11 Pro
このエラー発生後にfibonacci.htmlは出力されません。
普通に以下のサイトのとおりにインストールしてから以下のようにやりましょう
https://emscripten.org/docs/getting_started/Tutorial.html
@dameo サイト通りにインストールを行ったはずです。何が違っているのかご指摘いただけますか?
```emcc input_from_user.c -o input_from_user.html```ではコンパイルが通っています。
```c
#include <stdio.h>
#include <emscripten.h>
int main() {
int num1, num2;
printf("Enter the first number: ");
num1 = emscripten_run_script_int("prompt('Enter the first number:')");
printf("Enter the second number: ");
num2 = emscripten_run_script_int("prompt('Enter the second number:')");
int sum = num1 + num2;
int diff = num1 - num2;
int prod = num1 * num2;
printf("The sum of the two numbers is: %d\n", sum);
printf("The difference of the two numbers is: %d\n", diff);
printf("The product of the two numbers is: %d\n", prod);
return 0;
}
```
emcc input_from_user.c だけで十分ですよね?
wasmを作る以外、何がしたいのでしょう?
目的はなんですか?
Webassembly自体入門したてなので、正しい考えかわかりませんが、私は.htmlを出力して、プログラムの動作を確認したいのです。
●●●●AIにでも聞けば解決すると思いますが、普通に-oで.htmlを生成してもwebサーバーに配備すればそのまま稼働しますよ。●●●●
htmlファイルを -oオプションで出力するように指示していますが、そのhtmlファイルが生成されなくて困っているのです。よって、Webサーバーに配備することすらできません。
私の現状は
emcc input_from_user.c -o input_from_user.html ではhtmlの生成に成功しますが、
emcc fibonacci.c -o fibonacci.html --emrun ではhtmlの生成に失敗しているのです。
emcc input_from_user.c -o input_from_user.html
では何がまずいのですか?
emcc input_from_user.c -o input_from_user.htmlは問題なくhtmlが出力されているので、私の要求通りです。こちらは問題ありません。
しかし、emcc fibonacci.c -o fibonacci.html --emrunではhtmlの生成に失敗しているので、私の要求通りではありません。fibonacci.htmlが出力されず、開くこともできないのでfibonacci.cのwebasemmblyでの動作がhtmlで確認できないので困っています。
だからemrunでないと困る理由は何ですか?
fibonacci.htmlが出力されないので、emrun fibonacci.htmlができません。
emrun以外にプログラムの動作確認をできる方法はあるのですか?
紹介したページに書いてありますよね?
nodeでもインストールするのが手っ取り早いです。
pythonでも簡単にできるし、emrunだって普通に動きます。
インストールすらまともにできないからって何かのせいにしてはいけません。
紹介いただいたページが間違っていませんか?もしかして、こちらを前提にお話しくださっているのでしょうか?https://emscripten.org/docs/getting_started/downloads.html
公式ページですよ。。。●●●●
先ほどはチュートリアルのページを紹介くださっただけですよね?
https://emscripten.org/docs/getting_started/downloads.html
こちらの通りにインストールしているのですが、何をもって私のインストールが間違っているとご指摘くださっているのでしょうか?
公式のチュートリアルページ(一番始めに読む一番簡単なページ)になります
メッセージの行き違いかもしれませんが、チュートリアルの話ではなく、dameo様は先ほどからインストールが間違っているというご指摘ではありませんでしたか?
そうですね。私の環境では動いているし、そんなテストくらいしてると思うので。そして私が言ってるのは主に代替手段です。●●●●
私のコードで、emcc fibonacci.c -o fibonacci.html --emrunがdameo様の環境では動いているということで間違いないですか?
あなたが公式インストール手順どおりにインストールしているのは間違いないですか?
それ以外にインストール方法ってありますか?
●●●●
インストール方法が1つに限られていて、不手際など発生しますか?
更にemcc input_from_user.c -o input_from_user.htmlではコンパイルが通っているのにインストールの失敗を疑うのはいかがなものでしょうか?ほかの条件が通らないのですから、他の要因を疑ってしかるべきではないでしょうか?
公式のとおりにやって誰かが失敗したなら文句も出て簡単なものならすぐ修正されます。●●●●
ではお言葉ですが、
emcc input_from_user.c -o input_from_user.html
のコンパイルが問題なく通っていることはどう説明されるのですか?
公式のとおりにやって誰かが失敗したなら文句も出て簡単なものならすぐ修正されます。●●●●不手際の方法などいくらでもあるので、エラーそのものならcaclsコマンド一発で起こせるでしょう。
●●●●
●●●●
公式のとおりにやって誰かが失敗したなら文句も出て簡単なものならすぐ修正されます。
OSSだからと言って必ずしも
>公式のとおりにやって誰かが失敗したなら文句も出て簡単なものならすぐ修正されます
とは一概に言えないのではないでしょうか?
https://github.com/emscripten-core/emscripten/issues/22382
一応、私の方で問題が発生した手前、issueは投げてありますが。
ようはissueを選んで質問したってことなんですね
自分で検証しましたか?
検証せずに質問したり、issueを投げたり普通しますか?
ん?issueを投げた本人だと言っていますか?
開発元にissueを投げておいてここにマルチポストする人はいないと思いますが…無駄ですよね?
●●●●
●●●●
●●●●過去にこういうissueがありました。
https://github.com/emscripten-core/emscripten/issues/17452
コメント書き込む前に調べてはいたのですが、この件はpythonか何かのスクリプトで削除しないファイルが原因で「上書き」インストールが失敗するという話のようでした。closeはしています。
この流れで止まると誰かが気を使って出すような気がするので念の為。
●●●●
●●●●
以下のissueは「再現せず」でcloseされています。
https://github.com/emscripten-core/emscripten/issues/22382
ますます嘘っぽいですね。嘘だとしたらただでさえ忙しいOSS開発者に、受けた多大な恩を何の理由もなくひどい仇で返すようなことをしてることになります。
あなたの回答
tips
プレビュー