質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2123閲覧

macのg++が/usr/local/libをデフォルトで参照してくれない

omake

総合スコア13

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/03/13 17:25

編集2019/03/14 01:53

前提・実現したいこと

私の環境: macOS Mojave(10.14.3)において, clang++(Apple LLVM version 10.0.0 (clang-1000.10.44.4))はオプションを指定しなくても/usr/local/libを見に行ってくれるのですが,g++((Homebrew GCC 8.3.0) 8.3.0)ではオプションで -L /usr/local/lib を指定しないと見に行ってくれないようです.

質問としては,

  • 両者(clang++とg++)の挙動が異なる理由
  • g++ でもデフォルトで/usr/local/libを見に行ってくれるようにする方法

の2つをお聞きしたいです.よろしくおねがいします.

以下の例では参考までに, glog[https://github.com/google/glog]をリンクしてコンパイルした結果を示します.

発生している問題・エラーメッセージ

ld: library not found for -lglog collect2: error: ld returned 1 exit status

該当のソースコード

コンパイルできる例

Terminal

1clang++ prog.cpp -lglog

Terminal

1g++ prog.cpp -lglog -L /usr/local/lib

エラーになる例

Terminal

1g++ prog.cpp -lglog

エラー文

ld: library not found for -lglog collect2: error: ld returned 1 exit status

補足情報(FW/ツールのバージョンなど)

OS: macOS Mojave(10.14.3)
clang++(version): Apple LLVM version 10.0.0 (clang-1000.10.44.4)
g++(version): (Homebrew GCC 8.3.0) 8.3.0

追記(2019/03/14 10:44)

コメントの内容や,ネットの検索情報を元にして,試したことを追記します.

解決法1(失敗)

export LD_LIBRARY_PATH=/usr/local/lib
export DYLD_LIBRARY_PATH=/usr/local/lib
は試してみたのですが,効果はありませんでした.

解決法2(失敗)

/etc/ld.so.conf
を作成し,内容を
/usr/local/lib
を書き込みましたが,こちらも効果は観察されませんでした.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tachikoma

2019/03/13 22:53

ライブラリの場所はコンパイラからの相対パスで指定されてた気がしますね。動かして確認したわけではないですが。
Stan_Dma

2019/03/13 23:31

In general, the /etc/ld.so.conf file contains the directories that the compiler (strictly loader) will search libraries to be included. The other method is to divide some setting files into the /etc/ld.so.conf.d.
otn

2019/03/14 01:14

> /etc/ld.so.conf echo /usr/local/lib > /etc/ld.so.conf.d/usr-local.conf したのを思い出しました。
omake

2019/03/14 01:43

>tachikomaさん コメントありがとうございます. とりあえずg++をclang++と同じ場所において試してみたりなどしたのですが,解決はしませんでした. > Stan_Dmaさん, otnさん コメントありがとうございます. OSXにldconfigコマンドや/etc/ld.so.conf のファイルは存在しないらしいのですが,/etc/ld.so.conf を作成し,/usr/local/libを書いてみたところ,解決はしませんでした. ちなみに環境変数の値(env | grep LD_)は LD_LIBRARY_PATH=/usr/local/lib DYLD_LIBRARY_PATH=/usr/local/lib です.
otn

2019/03/14 02:00

/etc/ld.so.conf とか、LD_LIBRARY_PATH は、実行時に動的に呼び出す共有ライブラリの場所指定で、静的にリンクするライブラリは関係無かったはずです。 つい、書いてしまいました。 g++ -print-search-dirs で、リンク時に参照する場所が表示されますが、これはg++生成時に埋め込まれているので、追加は出来ないんじゃないかと思います。 g++を直接起動するのでなく、make するのであれば、LDFLAGS=-L/usr/local/lib でいいのですが。
omake

2019/03/14 02:19

>otnさん コメントありがとうございます。大変参考になりました。 brewを用いるのではなく、自分でインストールか、オプションを付けてインストールすれば解決しそうですね。どうもありがとうございます。
guest

回答1

0

ベストアンサー

デフォルトでと言うのが、コマンドラインで-L/usr/local/libをつけなくても動くという意味なら、環境変数で対応できます。

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/lib

参考

投稿2019/03/14 02:22

bsdfan

総合スコア4571

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

omake

2019/03/14 02:31

大変ありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問