@Hell_Knight

Как подключить C++17 (std::vector) к php-расширению?

Впервые решил попробовать сделать своё расширение для php.
Парсер toml-файла: https://github.com/Alexander1000/php-toml
Описал по образу и подобию других расширений config.m4 в котором подключаю stdc++, прокидываю флаг для используемого стандарта, а так же подключаю свою shared-библиотечку которую я использую в других своих pet-проектах (https://github.com/Alexander1000/io-buffer)
В итоге получилось что-то вроде такого:
dnl $Id$
dnl config.m4 for extension toml

PHP_ARG_ENABLE(toml, Whether to enable the TomlPHP extension, [ --enable-toml Enable TomlPHP])

if test "$PHP_TOML" != "no"; then
    dnl # --enable-toml -> check with-path
    AC_MSG_CHECKING(for libio-buffer in default path)
    for i in /usr/local /usr;
    do
        if test -r $i/lib/libio-buffer.a;
        then
            IO_BUFFER_DIR=$i
            AC_MSG_RESULT(libio-buffer.a found in $i)
        fi
    done

    if test -z "$IO_BUFFER_DIR";
    then
        AC_MSG_RESULT(not found)
        AC_MSG_ERROR(Please reinstall the io-buffer distribution - io-buffer.h should be /include and libio-buffer.a should be in /lib)
    fi

    CXX_FLAGS="-std=c++17"
    PHP_ADD_INCLUDE($IO_BUFFER_DIR/include)
    PHP_SUBST(IO_BUFFER_SHARED_LIBADD)
    PHP_ADD_LIBRARY_WITH_PATH(io-buffer, $IO_BUFFER_DIR/lib, IO_BUFFER_SHARED_LIBADD)
    PHP_SUBST(STD_SHARED_LIBADD)
    PHP_REQUIRE_CXX()
    PHP_ADD_LIBRARY(stdc++, "", STD_SHARED_LIBADD)
    # AC_DEFINE(HAVE_IO_BUFFER,1,[ ])

    PHP_NEW_EXTENSION(toml, php_toml.c, $ext_shared)
fi


А дальше пытаюсь начать её использовать в коде расширения:
// include the PHP API itself
#include <php.h>
// then include the header of your extension
#include "php_toml.h"
#include "php_toml_arginfo.h"

#include <io-buffer.h>

extern "C"
{
    // some logic... see in source
}


Но при компиляции вылетает ошибка: /usr/local/include/io-buffer.h:2:10: fatal error: 'vector' file not found
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
У вас расширение файла стоит .с, а пишете вы на C++. Исправьте расширение на .cpp
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы