c ++ — Windows vs. Linux против Mac: различные расширения php с одинаковым именем структуры и некоторыми общими файлами

У меня есть два расширения php — A и B.

У меня есть:

struct foo : public functor {
virtual void operator()( some parameters );
};

В б.ч у меня тоже самое

struct foo : public functor {
virtual void operator()( some parameters );
};

Функтор объявлен в shared.h, который является общим для двух расширений

struct functor {
virtual void operator()( some parameters );
};

void foo :: operator () (некоторые параметры) реализованы по-разному в a2.cpp и b2.cpp.

В a1.cpp у меня есть список функторов, используемых в расширении A:

const functor a_func[] = {
func1(new func1),
func2(new func2),
foo(new foo),
func4(new func4)
};

В b2.cpp у меня есть похожий список:

const functor b_func[] = {
func1(new func1),
foo(new foo),
func3(new func3),
func4(new func4)
};

Функция foo вызывается в shared.cpp

const functor* func = get_func( functors );
*func( some arguments );

Где ‘functors’ — это либо a_func, либо b_func, а shared.cpp вызывается из расширения A или расширения B в зависимости от используемого вами API.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что при тестировании расширения B на Mac и при загрузке расширения A до расширения B в php.ini вместо b2.cpp используется функция foo, определенная в a2.cpp. Но если я переверну порядок в php.ini, все будет нормально. Когда я отлаживаю в нем, я вижу, что список функторов, передаваемых в get_func (), правильный (то есть b_func).

Я попытался использовать пространство имен или переименовать функцию foo в A и B, которая устраняет проблему. Но вот что меня смущает, так это то, что расширения всегда работали в Windows и Linux, однако теперь у них есть проблема с определением одного имени на Mac.

0

Решение

На всякий случай, если другие люди задаются вопросом. Это потому, что MacOS имеет конфигурацию по умолчанию плоского пространства имен. Чтобы это исправить, нужно положить в MACOSX_DEPLOYMENT_TARGET=sw_vers -productVersion в вашем конфигурационном файле.

0

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

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

По вопросам рекламы [email protected]