1

C++ で書かれた 2 つのプロジェクトがあります。プロジェクトに最初と 2 番目の名前が付けられているとします。最初のプロジェクトは基本プロジェクトで、2 番目のプロジェクトには最初のプロジェクトのアドオンがあるため、2 番目のプロジェクトをビルドしてインストールすると、最初のプロジェクトの機能が追加されます。

'first' と 'second' の 2 つの個別の Makefile プロジェクトを作成し、両方を個別にビルドすることができました。

私の問題は、「最初」で生成されたバイナリを「2 番目」のベース バイナリとしてリンクできないことです。stackoverflow で同様の質問を検索しようとしましたが、「最初」で生成されたバイナリを「2 番目」にリンクする方法についてはまったくわかりませんでした。

質問を再構成する必要がある場合はお知らせください。

4

1 に答える 1

1

GCC を使用していて、リンカー オプションのリファレンスを読むと、外部ライブラリとリンクするためのオプションに気付くでしょう。

  • -L<directory>

    このオプションは<directory>、ライブラリ検索パスに追加するようリンカーに指示します。つまり、ライブラリ ファイルの場所をリンカに指示します。

  • -l<name-of-lib>

    このオプションは、リンカーにライブラリとリンクするように指示します。POSIX 環境 (Linux、OSX、Cygwin または MinGW を使用する Windows) のライブラリは のようlibname-of-lib.aに名前が付けられますが、オプションを使用すると、接頭辞や拡張子-lを使用する必要はありません。また、オプションでは、それは小文字の L (大文字の i や数字の 1 ではない) であることに注意してください。lib.a-l

要約すると、別のディレクトリからライブラリにリンクするには、次のようにリンクします。

$ gcc <other flags> <object files> -o <executable> -L<directory> -l<library>

あなたの場合、-Lオプションにはライブラリがあるディレクトリを指定しproject1、オプション-lにはライブラリの基本名を渡す必要があります。


一方project1、ライブラリに変換せず、そのオブジェクト ファイルと直接リンクしたい場合は、それも問題ありません。

$ gcc <flags> <object files of project1> <object files of project2> -o <executable>

もちろん、オブジェクト ファイルは絶対パスまたは相対パスにすることができます。たとえば、次のディレクトリ構造があるとします。

/
`-- ホーム
    `-- ユーザー
        `-- 私のプロジェクト
            |-- project1
            `-- project2

次に、ディレクトリにいる場合は、次のようにproject2オブジェクトファイルにアクセスできますproject1

../project1/objectfile.o

もちろん、これらはすべて Makefile に入れることができます。

于 2012-10-12T20:53:54.227 に答える