Странности линковки статической либы
От: sun2013  
Дата: 28.04.13 23:43
Оценка:
Привет всем!
Есть маленькое консольное тестовое приложение под 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 все линкуется? (проверено несколько раз!)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.