FastFormat на OS X

Прочитав немного о FastFormat, я решил загрузить и установить его на свой Macbook Pro, работающий под управлением OS X 10.8. Я успешно получил FastFormat для сборки и провел тесты производительности. Затем я написал небольшой тест, чтобы проверить, работает ли он:

#include <cstdlib>
#include <fastformat/fastformat.hpp>
#include <fastformat/sinks/ostream.hpp>

int main()
{
return EXIT_SUCCESS;
}

После компиляции с помощью g ++ — 4.7 (и проверки правильности всех путей включения) я получил ошибки времени компиляции, такие как приведенные ниже, от PlatformSTL.

error: #error Operating system not discriminated. Only UNIX and Windows are currently recognised by PlatformSTL
error: #error Operating system not discriminated

Я пытался подавить эти ошибки, определяя unix а также PLATFORMSTL_OS_IS_UNIX вручную, но затем я получаю следующие ошибки компоновщика:

Undefined symbols for architecture x86_64:
"_fastformat_exitProcess", referenced from:
fastformat::fastformat_initialiser::fastformat_initialiser() in ccMqErni.o
"_fastformat_getInitCodeString", referenced from:
fastformat::fastformat_initialiser::record_init_failure_(int)    in ccMqErni.o
"_fastformat_init", referenced from:
fastformat::fastformat_initialiser::fastformat_initialiser() in ccMqErni.o
"_fastformat_uninit", referenced from:
fastformat::fastformat_initialiser::~fastformat_initialiser() in ccMqErni.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Поддерживается ли FastFormat в OS X, и если да, что я делаю не так?

1

Решение

Mac OS X не предоставляет UNIX (или же unix, __unix__, __unix) макрос который PlatformSTL пытается обнаружить. Я смог скомпилировать ваш пример после добавления строки defined(__MACH__) заявление в platformstl.h вот так (строка 154):

#if defined(unix) || \
defined(UNIX) || \
defined(__unix__) || \
defined(__unix) || \
defined(__MACH__)
# define PLATFORMSTL_OS_IS_UNIX

Чтобы подавить неопределенную ошибку символов, вы можете определить макрос FASTFORMAT_NO_AUTO_INIT:

g++ -I<path to fastformat and stlsoft headers> -DFASTFORMAT_NO_AUTO_INIT main.cpp

1

Другие решения

Других решений пока нет …