私は "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. コードをアプリファイルにエクスポートするにはどうすればよいですか? (iPhone)
- 3. C++コードをコンパイルしてCコードとリンクするにはどうすればよいですか?
- 4. osライブラリから特定の関数を削除するにはどうすればいいですか?
- 5. データベースからビューをエクスポートするにはどうすればよいですか?
- 6. "DOS EXE"ヘッダーフラグ== falseを指定してC++プロジェクトをコンパイルするにはどうすればよいですか?
- 7. C++アドレステーブルフッキング(EAT)をエクスポートするにはどうすればよいですか?
- 8. RoslynでC#ソリューションをコンパイルするにはどうすればよいですか?
- 9. ある関数から別の関数に引数を渡すにはどうすればよいですか?
- 10. C++でライブラリを追加するにはどうすればよいですか?
- 11. wp-load.phpを使用するときにテーブルプレフィックスを指定するにはどうすればよいですか?
- 12. コントロールにスマートタグを指定するにはどうすればよいですか?
- 13. Android用に独自のC++ライブラリをコンパイルするにはどうすればよいですか?
- 14. C++コードをコンパイルするときのバージョン管理に関する問題を解決するにはどうすればよいですか?
- 15. ブラウザアクションのホットキーを指定するにはどうすればよいですか?
- 16. C#:NReadabilityライブラリを構築するにはどうすればよいですか?
- 17. NServiceBus.Host.exeでエンドポイントクラスを指定するにはどうすればよいですか?
- 18. jQueryセレクタを指定するときは、どうすればいいですか? ":"
- 19. Cの複数の変数を関数からmainに渡すにはどうすればよいですか?
- 20. C#でデータセットまたはデータテーブルからExcelをエクスポートするにはどうすればよいですか?
- 21. 大きな指数関数を計算するにはどうすればよいですか?
- 22. Jcursesライブラリを設定するにはどうすればよいですか?
- 23. C++でベクトルへのポインタを返す関数を設定するにはどうすればよいですか?
- 24. MS AccessデータベースからOracle 11gに複数のテーブルをエクスポートするにはどうすればよいですか?
- 25. Eclipseで-strictフラグを指定してGWTをコンパイルするにはどうすればよいですか?
- 26. 関数を関数ポインタとしてcで宣言するにはどうすればよいですか?
- 27. Android.mkファイルまたはApplication.mkファイルでライブラリのパスを指定するにはどうすればよいですか?
- 28. 最大ダウンロードサイズを指定するにはどうすればよいですか?
- 29. 変数/関数定義をParallel(ParallelMapなど)で設定するにはどうすればよいですか?
- 30. mingw32のdll onload関数を指定するにはどうすればよいですか?
これは、.defファイルを使用することができると思います。 – ruslik
@ruslikはウィンドウです – alternative