私は "C"コードでいくつかの機能を持っています。 .soをコンパイルすると、結果の.soファイルにすべての名前が表示されます。どのようにして(コード内またはmakeファイル内に)いくつかの関数だけをエクスポートするように指定することができます。Cコードをコンパイルするときに.soライブラリからどの関数をエクスポートするかを指定するにはどうすればよいですか?
答えて
Cでは、関数がファイル内に(技術的には「コンパイル単位」)残っていて、それを「静的」と宣言したい場合に使用します。あなたが.so
ファイルに言及しているので、例えば
static int privateAddOne(int x) { return x + 1; }
コンパイルユニットにはプライベートで、ライブラリにはプライベートなものはほとんどありません。ほとんどの重要でないライブラリには多くのソースファイルがあります。 –
、それはあなたがgcc
またはGCC-似コンパイラを使用している合理的な仮定のように思えます。
デフォルトでは、すべての関数がリンクオブジェクトに表示されます。extern
(extern
それらを維持しながら、彼らは同じライブラリ内の他のソースファイルから使用することを可能にする、)あなたはhidden
属性を使用して、ケースバイケースで機能(およびグローバル変数)を非表示にすることができます:
int __attribute__((visibility("hidden"))) foo(void)
{
return 10;
}
あるいは、コンパイル時にオプションをgcc
に渡すことによって、デフォルトをhidden
に変更することができます。
__attribute__((visibility("default")))
+1正直なところ、これは受け入れられたものよりも優れた答えです(より強力です)。もちろん、あなたは2つの組み合わせを使用する必要があります! – alternative
+1別のオプションを追加するには、ldリンカーとバージョンスクリプトの組み合わせを使用して、ソースコードに触れずに同様の結果を得ることができます。 – vanza
この回答は正しいですが、絶対に使用しないでください。名前空間を汚染したり、呼び出し元のプログラムを破ったりすることを避けるために、可視性でシンボルを隠すことに依存するコードは、本質的に移植性がありません。ライブラリ自体の外部で使用されるべきではない外部関数が必要な場合は、ライブラリ名にいくつかのライブラリ固有のジャンクを付けてください(先頭にアンダースコアは付けません)。 –
- 1. ユーザ定義/ライブラリ関数とコンパイル済みファイルを区別するにはどうすればよいですか?
- 2. Dartのノードの関数をエクスポートするコードを生成するにはどうすればよいですか?
- 3. Objective-Cの異なるライブラリからコードを区別するにはどうすればよいですか?
- 4. C++コードをコンパイルしてCコードとリンクするにはどうすればよいですか?
- 5. コードをアプリファイルにエクスポートするにはどうすればよいですか? (iPhone)
- 6. "DOS EXE"ヘッダーフラグ== falseを指定してC++プロジェクトをコンパイルするにはどうすればよいですか?
- 7. コマンドライン引数を指定するにはどうすればよいですか?
- 8. データベースからビューをエクスポートするにはどうすればよいですか?
- 9. Goコードをライブラリにするにはどうすればよいですか?
- 10. osライブラリから特定の関数を削除するにはどうすればいいですか?
- 11. ポインタを指定したコンパイル済みコードから、エクスポートされていないC関数名を取得する。
- 12. GuileのScheme関数からC関数ポインタを作成するにはどうすればよいですか?
- 13. この関数をCからC#に変換するにはどうすればよいですか?
- 14. ソースからJicofoをコンパイルするにはどうすればよいですか?
- 15. C++アドレステーブルフッキング(EAT)をエクスポートするにはどうすればよいですか?
- 16. RoslynでC#ソリューションをコンパイルするにはどうすればよいですか?
- 17. オプションでPythonで関数の引数を指定するにはどうすればよいですか?
- 18. C++でライブラリを追加するにはどうすればよいですか?
- 19. C#コードをスキャンするようにfortifyを設定するにはどうすればよいですか?
- 20. BigQueryに行をストリーミングするときにタイムアウトを指定するにはどうすればよいですか?
- 21. Clojureで高次関数の引数を指定するにはどうすればよいですか?
- 22. どのドロップダウンに入力するのかを指定するにはどうすればよいですか?
- 23. Android用に独自のC++ライブラリをコンパイルするにはどうすればよいですか?
- 24. 複数の共有ライブラリ用に1つのヘッダファイルをエクスポートするにはどうすればよいですか?
- 25. C#:NReadabilityライブラリを構築するにはどうすればよいですか?
- 26. コントロールにスマートタグを指定するにはどうすればよいですか?
- 27. wp-load.phpを使用するときにテーブルプレフィックスを指定するにはどうすればよいですか?
- 28. C#7のコードをコンパイルするにはどうしたらいいですか?
- 29. 関数引数のオブジェクト位置を指定するにはどうすればよいですか?
- 30. ある関数から別の関数に引数を渡すにはどうすればよいですか?
これは、.defファイルを使用することができると思います。 – ruslik
@ruslikはウィンドウです – alternative