2016-08-20 16 views
0

IDE /コンパイラ/リンカーにヘッダーファイル名から共有オブジェクトファイル名(lib * .so)を識別する方法があるのだろうかと思います。IDEがヘッダーファイルから共有ライブラリ名.soを見つける方法.h

私はEclipse CDTを使用しています。私はstdioなどを誰もが含んでいますが、いくつかの奇妙なライブラリでは、IDEにライブラリ名とパスを伝える必要があります。以下の場合:

#include "opencv2/core/core.hpp" 

私は、ライブラリopencv_coreを使用するようにリンカに指示する必要があり(IDEリンカーの-lopencv_coreパラメータを生成するので、それはlibopencv_core.soを探します)。

ライブラリ名からライブラリファイル名を取得する方法は非常に明確です。ヘッダーファイルから取得する方法がわかりません。

私はこの問題の答えをstackoverflowや他の場所で見つけることができませんでしたので、ヘッダファイルとライブラリファイル名の間には関係がないと思われます。

ありがとうございました。

+1

あなたの疑惑が正しいと思いました。ヘッダーファイルがどこかにあると仮定すると、ヘッダーファイルには "Hey、私の図書館がそこにある!"というメッセージが表示されます。少なくともC++標準には何もありません。個々のC++の実装は自由に行うことができますし、そういうものもあります。しかし、C++の標準が進んでいる限り、答えは「いいえ」です。 –

+0

ありがとうございます、それはリグレスの答えです。リンカは、標準のC++ライブラリがどこにあるか知っているだけです。 –

+0

@SamVarshavchik:そのコメントを回答にコピーすると、OPはそれを受け入れることができます。 –

答えて

1

あなたの疑惑は正しいと思いました。ヘッダーファイルがどこかにあるとすれば、ヘッダーファイルには見えないものも隠されていないものもあります。コンパイラーに "Hey、私の図書館はそこにあります!"少なくともC++標準には何もありません。個々のC++の実装は自由に行うことができますし、そういうものもあります。しかし、C++の標準が進んでいる限り、答えは「いいえ」です。

あなたのリンカーは、各C++実装またはオペレーティングシステムによって異なります。場合によっては、リンクするライブラリを検索するディレクトリの既定のリストがリンカにあり、標準のC++ライブラリがそこに入ります。

リンカーは直接呼び出されることはありませんが、コンパイラーによって呼び出されます。これはgccの場合です。 gccの一般的なリンク操作は、

g++ -o prg module1.o module2.o 

gccのライブラリがどこにあるか知っています。リンカは通常、ldを呼び出し、リンクするモジュールに加えて、C++標準ライブラリの場所を提供します。

関連する問題