Homebrew / legacy-homebrew

💀 The former home of Homebrew/homebrew (deprecated)
https://brew.sh
26.97k stars 11.35k forks source link

Boost fails to link libicu with --build-from-source on 10.8 #16150

Closed novocaine closed 11 years ago

novocaine commented 11 years ago

the libicu in brew now builds with c++11 by default if its available, which means boost 1.52 fails to build with --build-from-source (which I need because I want to bind against the brew python, not the system one).

"c++" -dynamiclib -Wl,-single_module -install_name "/usr/local/lib/libboost_locale-mt.dylib" -o "/usr/local/Cellar/boost/1.52.0/lib/libboost_locale-mt.dylib" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/encoding/codepage.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/date_time.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/format.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/formatting.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/generator.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/ids.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/localization_backend.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/message.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/shared/mo_lambda.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/util/codecvt_converter.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/util/default_locale.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/util/info.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/util/locale_data.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/boundary.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/codecvt.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/collator.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/conversion.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/date_time.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/formatter.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/icu_backend.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/numeric.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/icu/time_zone.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/posix/codecvt.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/posix/collate.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/posix/converter.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/posix/numeric.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/posix/posix_backend.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/std/codecvt.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/std/collate.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/std/converter.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/std/numeric.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/std/std_backend.o" "bin.v2/libs/locale/build/darwin-4.2.1/release/threading-multi/util/gregorian.o" "bin.v2/libs/thread/build/darwin-4.2.1/release/threading-multi/libboost_thread-mt.dylib" "bin.v2/libs/chrono/build/darwin-4.2.1/release/threading-multi/libboost_chrono-mt.dylib" "bin.v2/libs/system/build/darwin-4.2.1/release/threading-multi/libboost_system-mt.dylib" -liconv -licuuc -licui18n -licudata -headerpad_max_install_names -Wl,-dead_strip -no_dead_strip_inits_and_terms

Undefined symbols for architecture x86_64: "icu_50::UnicodeString::doReplace(int, int, unsigned short const*, int, int)", referenced from: boost::locale::impl_icu::strftime_to_icu(icu_50::UnicodeString const&, icu_50::Locale const&) in formatter.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

This seems to be because libicuuc has been created with the c++11 type "char16_t":

~ nm /usr/local/Cellar/icu4c/50.1/lib/libicuuc.50.1.dylib | grep doReplace | c++filt 00000000000418bc T icu_50::UnicodeString::doReplace(int, int, char16_t const*, int, int) 0000000000043bd2 T icu_50::UnicodeString::doReplace(int, int, icu_50::UnicodeString const&, int, int)

which apparently doesn't match unsigned short const*.

there doesn't appear to be an obvious way to tell libicu to stop doing that short of patching the configure script.

the way I resolved this is to do

brew install boost --with-c++11

but obviously itd be nice if it worked out of the box

novocaine commented 11 years ago

dupe of https://github.com/mxcl/homebrew/issues/16142