Привет всем!
Есть маленькое консольное тестовое приложение под Mac OS, также есть маленькая тестовая статическая C++ либа тоже под Mac OS. Собирается все в XCode 4.6.2. Компилятор один и тот же — дефолтный Apple LLVM 4.2. Но вот есть разница в результате при следующих настройках использования библиотеки C++.
1. Если
app — libc++
lib — libc++
тогда всё ok
2. Если
app — libstdc++
lib — libc++
тогда всё ok
3. Если
app — libc++
lib — libstdc++
тогда ошибки линковки:
Undefined symbols for architecture x86_64:
"std::ios_base::Init::Init()", referenced from:
___cxx_global_var_init in lib01SampleCppLibrary.a(Test.o)
"std::ios_base::Init::~Init()", referenced from:
___cxx_global_var_init in lib01SampleCppLibrary.a(Test.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
4. Если
app — libstdc++
lib — libstdc++
тогда всё ok
Так вот вопросы:
1. Чем вообще отличаются эти две либы?
2. Почему не линкуется именно в такой комбинации (3)?
3. Почему в комбинации 2 все линкуется? (проверено несколько раз!)