Пытаюсь собрать самостоятельно библиотеку Zeroc ICE версии 3.6.4. Перехожу в cpp каталог, делаю make и, доустановив то что не хватало, всё наконец собирается. Появляются libIce.so.3.6.4 и libIceUtil.so.3.6.4, указываю includepath, указываю libs. У меня gcc version 4.8.4.
Однако собрать свою программу в итоге не выходит. Сам процесс компиляции проходит успешно, но валится на undefined reference to `IceInternal::Cpp11FnCallbackNC::Cpp11FnCallbackNC и прочих подобных.
Стал выяснять - этих функций и этих классов тупо нет в so-файлах. Само их объявление появляется в таких блоках:
#ifdef ICE_CPP11
::Ice::AsyncResultPtr
IceProxy::IceMX::MetricsAdmin::__begin_getMetricsViewNames(const ::Ice::Context* __ctx, const ::IceInternal::Function<void (const ::Ice::StringSeq&, const ::Ice::StringSeq&)>& __response, const ::IceInternal::Function<void (const ::Ice::Exception&)>& __exception, const ::IceInternal::Function<void (bool)>& __sent)
{
class Cpp11CB : public ::IceInternal::Cpp11FnCallbackNC
Стал смотреть - в файле Config.h библиотеки есть такой участок:
#if (__cplusplus >= 201103) || \
((defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) && ((__GNUC__* 100) + __GNUC_MINOR__) >= 405)) || \
(defined(_MSC_VER) && (_MSC_VER >= 1600))
# define ICE_CPP11
#endif
Как побороть эту проблему? Не понимаю, при сборке ни разу ни пикнуло об варнингах, не то что ошибках.
Я даже явно пробовал подсовывать все файлы и каталоги:
CONFIG += c++11
QMAKE_CXXFLAGS+="-std=c++11"
INCLUDEPATH += /home/user/work/w/ice-3.6.4/cpp/include
LIBS += -L/home/user/work/w/ice-3.6.4/cpp/lib/x86_64-linux-gnu -l:libIce.so.3.6.4 -l:libIceUtil.so.3.6.4