8

Mac OS X (10.7.1) で C++ 用のgoogle-gflagsコマンドライン フラグ ライブラリを構築しています。ビルドプロセスは次のとおりです。

$ ./configure --prefix=output
$ make
$ make install 

ビルド時に生成された共有ライブラリのインストール名を変更し、install_name_toolその後は使用しないようにしたいと考えています。

デフォルトでは、生成された共有ライブラリのインストール名libgflags.dylibは出力パスです。

$ otool -L ./output/libgflags.dylib
$ ./output/libgflags.dylib:
    /tmp/gflags-1.5/output/lib/libgflags.0.dylib (compatibility version 2.0.0, current version 2.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0) 

のマニュアル ページにld(1)は、-install_nameリンク時に動的ライブラリのインストール名を変更するために使用できるオプションがあります。

たとえば、ダミー プログラムを使用すると、次のようになります。

$ g++ -dynamiclib temp.cc -install_name /tmp/temp.dylib -o temp.dylib
$ otool -L temp.dylib 
temp.dylib:
    /tmp/temp.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.0.0)

しかし、./configureスクリプトでこのコマンド ライン オプションを使用できません。変数を手動で設定しようとしましCFLAGSたが、エラーが発生します。

$ CFLAGS="-install_name /tmp/desired/location/libgflags.dylib" ./configure
checking for a BSD-compatible install... /opt/local/bin/ginstall -c
checking whether build environment is sane... yes
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/Users/vibhav/Code/install_name_test/gflags-1.5':
configure: error: C compiler cannot create executables

configureでは、.dylib を使用して、またはmake使用せずに生成された .dylib のインストール名を変更することは可能install_name_toolですか?

4

2 に答える 2

7

一般に、g++ を介してリンカー引数を渡す場合は、先頭に -Wl を付け、スペースをコンマに置き換える必要があります。したがって、「-install_name /tmp/temp.dylib」をリンカーに渡したい場合は、次のように呼び出す必要があります。

g++ -Wl,-install_name,/tmp/temp.dylib ...
于 2012-08-29T04:37:55.430 に答える
5

考えられるアプローチの 1 つは、config.status を手動で編集することです。でもそうしようとする前に、install_name_tool -id私の命を救ってくれました。

于 2012-10-30T05:50:56.457 に答える