各プログラムにはmain()
があり、そこからプログラムが実行されます。 main()
なしでプログラムを書いて、別の機能をエントリーポイントにすることは可能ですか?もしそうなら、どうすればいいのか教えてください。私はLinuxを使用していますか?C言語でmain()以外のエントリポイントとして他の関数を作成する方法
答えて
gccでコンパイルする場合は、-e <symbol>
オプションを指定すると、エントリポイントを関数symbol()
に変更できます。
これは、標準ライブラリがすでに実行していると仮定するスタートアップコードをバイパスするので、ひどく壊れてしまう可能性があります... –
確かに、これは "main()なしで関数を記述し、私はlinuxを使っています。「どうしたらCプログラムへのエントリーポイントを変えて、ひどく壊れないようにすることができますか?」ではなく、「linux」を使っています。 –
十分に公正です。あなたの答えを批判するよりも、これをしないことがOPにはもっと言いたいことです。 –
プログラムをビルドする実行可能な共有ライブラリを作成するためのソリューションがあります。これは、別の機能をエントリポイントとして使用します。
コードは次のようになります。この方法の問題は、funcができないということです
$ gcc -fpic -shared -o fun.so -Wl,-e,fun fun.c
$ ./fun.so
を:
#include <stdio.h>
#include <stdlib.h>
const char __invoke_dynamic_linker[] __attribute__ ((section (".interp")))
= "/lib/ld-linux.so.2";
void fun()
{
printf("This is fun./n");
exit(0);
}
そして、共有ライブラリとしてあなたのプログラムを構築し、エントリポイントとしてFUNCを指定しますmain関数のように普通の引数を持っているのですが、これは主な引数を初期化するためのcライブラリがないからです。
あなたの提案は、質問よりもはるかに曖昧に思えます。あなたのアドレスが名前で参照できるように、エントリ関数が動的にリンクされたライブラリになければならないと言っていますか? –
@GeorgeSkoptsov動的にリンクされたライブラリである必要はありません。シンボル情報を削除する必要がない場合にのみ、プログラム自体に存在する可能性があります。また、既知の関数シンボルと引数を比較するハードコーディングが可能です。私はManuがプログラムが異なる機能を呼びたいと思うと思う。 –
- 1. main関数からdll(C++)関数をC言語で使用する方法#
- 2. 英語以外の言語のアプリを作成する正しい方法
- 3. C++ main()関数の外部でクラスのインスタンスを作成する
- 4. C++のエントリポイント - > main()
- 5. 自分のスリープや遅延関数をC言語で作成する方法
- 6. サブライムテキスト3のプラグインをPython以外の言語で作成する
- 7. 英語以外の言語でsmsを送信する方法
- 8. Pythonでoptparseを作成する方法他の言語
- 9. main()以外のQtでウィンドウを作成していますか?
- 10. EclipseでC言語でmain()メソッドを2つ以上持つ
- 11. C言語に依存しないgotoxy()関数の作成
- 12. EditTextで英語以外の他の言語の使用を禁止する
- 13. 他の言語のためのC++でのライブラリの作成
- 14. C言語の変数と関数
- 15. システムコールはC言語以外の言語でも利用できますか?
- 16. 作成した関数をint main()Cプログラミングに呼び出す方法は?
- 17. 数学関数がC言語の "make"で動作しない
- 18. C言語の関数ポインタ
- 19. C言語のstrcat関数
- 20. Python以外の言語を有効にする方法は?
- 21. 英語以外の言語で日付を書式設定する方法
- 22. 他の言語のgetDate関数?
- 23. MVCリソースファイル以外の言語
- 24. C++で外部cuda関数テンプレートを宣言する方法
- 25. ユーザー定義言語を作成するときにC言語キーワードの検出を含める方法
- 26. 複数のtxtファイルを作成してC言語で書くと
- 27. C++以外の言語は、C++ソースファイルをネイティブサポートしていますか?
- 28. Androidシミュレータの英語以外の言語
- 29. 英語以外の言語のPython SL4A
- 30. 英語以外の言語のPOS
エントリポイントとして 'main'を持たないことで何を達成しようとしていますか? – eduffy
@eduffyはCの本を読んでいましたが、main()は他の多くの関数と同じ機能しか持っていませんでしたので、この疑問は – Manu
を参照してください。http://linuxgazette.net/issue84/hawk.html 'main()'が呼び出される前に何が起こるかを見てください。 – eduffy