LoginSignup
2
1

More than 5 years have passed since last update.

MacPorts + CMakeで_iconvなどのシンボルが見つからない場合の対処

Posted at

結論

cmakeのオプションに-DCMAKE_PREFIX_PATH=/opt/localを指定して、MacPorts内のヘッダファイル、ライブラリを検索するように指定する

背景

ZXing C++ Library をMacPorts上のCMakeでビルドすると、下記のメッセージが出てビルドが失敗してしまいました。_iconv, _iconv_close, _iconv_openというシンボルが見つからないというエラーです。

Undefined symbols for architecture x86_64:
  "_iconv", referenced from:
      (anonymous namespace)::add(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char) in libzxing.a(Decoder.cpp.o)
      zxing::qrcode::DecodedBitStreamParser::append(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*, unsigned long, char const*) in libzxing.a(DecodedBitStreamParser.cpp.o)
  "_iconv_close", referenced from:
      (anonymous namespace)::add(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char) in libzxing.a(Decoder.cpp.o)
      zxing::qrcode::DecodedBitStreamParser::append(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*, unsigned long, char const*) in libzxing.a(DecodedBitStreamParser.cpp.o)
  "_iconv_open", referenced from:
      (anonymous namespace)::add(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char) in libzxing.a(Decoder.cpp.o)
      zxing::qrcode::DecodedBitStreamParser::append(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&, char const*, unsigned long, char const*) in libzxing.a(DecodedBitStreamParser.cpp.o)
ld: symbol(s) not found for architecture x86_64

cmake実行時の下記のログから、iconvは見つかっているようでした。

-- Found Iconv: /opt/local/lib/libiconv.dylib

原因

ライブラリは/opt/local配下のものが見つかっていましたが、インクルードファイルは/usr配下のものが見つかっていたのが原因でした。/usr配下のiconvと/opt/local配下のiconvには違いがあるため、上記のエラーが出ていました。

解決方法

cmake実行時のオプションに、-DCMAKE_PREFIX_PATH=/opt/localを指定することで、/opt/local配下のファイルを優先的に検索させることができます。このオプションをつけることで、問題が解決し、ビルドに成功しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1