Модуль C для ожидаемого выражения PHP во время PHP_FEPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Модуль C для ожидаемого выражения PHP во время PHP_FE

Сообщение Anonymous »

Я пытаюсь написать репозиторий Hello World, который принимает стандартную функцию C и предоставляет ее как внутреннюю/встроенную функцию для PHP (и других языков, написанных на C).< /p>

Код: Выделить всё

[ 27%] Building C object CMakeFiles/carbon_php.dir/bindings/php/carbon_php.c.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -Dcarbon_php_EXPORTS -I/Users/richardmiles/CLionProjects/OmniLang-C-Template/../php-src/main -I/Users/richardmiles/CLionProjects/OmniLang-C-Template/../php-src/Zend -I/Users/richardmiles/CLionProjects/OmniLang-C-Template/../php-src/TSRM -I/Users/richardmiles/CLionProjects/OmniLang-C-Template/../php-src -I/usr/local/Frameworks/Python.framework/Versions/3.12/include/python3.12 -I/Users/richardmiles/CLionProjects/OmniLang-C-Template/include -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk -fPIC -MD -MT CMakeFiles/carbon_php.dir/bindings/php/carbon_php.c.o -MF CMakeFiles/carbon_php.dir/bindings/php/carbon_php.c.o.d -o CMakeFiles/carbon_php.dir/bindings/php/carbon_php.c.o -c /Users/richardmiles/CLionProjects/OmniLang-C-Template/bindings/php/carbon_php.c
/Users/richardmiles/CLionProjects/OmniLang-C-Template/bindings/php/carbon_php.c:14:55: error: expected expression
PHP_FE(carbon_version, arginfo_carbon_version),
^
/Users/richardmiles/CLionProjects/OmniLang-C-Template/bindings/php/carbon_php.c:15:63: error: expected expression
PHP_FE(carbon_hello_world, arginfo_carbon_hello_world),
^
Просмотр этого сообщения показывает, что я использую PHP_FE неправильно, но я заменил явные определения аргументов на NULL и по-прежнему не использую сигару. Я знаю, что обычно они должны работать, основываясь на том, как я добавлял функции PHP в PHP-SRC в прошлом, но поскольку это отдельный репозиторий, я запутался. Чат GPT идет по кругу, поэтому я надеюсь, что немного любви сообщества — это то, что нужно. В колледже я учился на языке C, но прошло много времени. Я использую Clion, поэтому я обычно знаю, что синтаксис не вызывает проблемы.
Я создал репозиторий в RichardTMiles/OmniLang-C-Template открытый исходный код, чтобы увидеть полный код; вот образец.
/src/carbon.c

Код: Выделить всё

const char* carbon_version() {
return "CarbonC 1.0.0";
}

const char* helloWorld() {
return  "Hello World!";
}
/bindings/php/carbon_php.c

Код: Выделить всё

#ifndef CARBON_PHP_H
#define CARBON_PHP_H

#include
#include "carbon.h"

PHP_FUNCTION(carbon_version);
PHP_FUNCTION(carbon_hello_world);

extern zend_module_entry carbon_module_entry;
#define phpext_carbon_ptr &carbon_module_entry

ZEND_BEGIN_ARG_INFO(arginfo_carbon_version, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO(arginfo_carbon_hello_world, 0)
ZEND_END_ARG_INFO()

#endif // CARBON_PHP_H

Код: Выделить всё

#include "carbon_php.h"

PHP_FUNCTION(carbon_version) {
const char* version = carbon_version();
RETURN_STRING(version);
}

PHP_FUNCTION(carbon_hello_world) {
const char* message = helloWorld();
RETURN_STRING(message);
}

const zend_function_entry carbon_functions[] = {
PHP_FE(carbon_version, arginfo_carbon_version),
PHP_FE(carbon_hello_world, arginfo_carbon_hello_world),
PHP_FE_END
};

zend_module_entry carbon_module_entry = {
STANDARD_MODULE_HEADER,
"carbon",                   // Extension name
carbon_functions,           // Functions
NULL,                       // MINIT
NULL,                       // MSHUTDOWN
NULL,                       // RINIT
NULL,                       // RSHUTDOWN
NULL,                       // MINFO
"1.0.0",                    // Version
STANDARD_MODULE_PROPERTIES
};

#ifdef COMPILE_DL_CARBON
ZEND_GET_MODULE(carbon)
#endif
И, наконец, мой CMakeLists.txt

Код: Выделить всё

cmake_minimum_required(VERSION 3.10)
project(OmniLangC VERSION 1.0)

# Core C library
add_library(carbon SHARED src/carbon.c)
target_include_directories(carbon PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

# Set the path to your PHP source directory
set(PHP_SRC_DIR "../php-src")

# Allow user to specify PHP_SRC_DIR via environment variable or CMake command line
if (DEFINED ENV{PHP_SRC_DIR})
set(PHP_SRC_DIR $ENV{PHP_SRC_DIR})
endif()

# Add PHP include directories
include_directories(
${PHP_SRC_DIR}/main
${PHP_SRC_DIR}/Zend
${PHP_SRC_DIR}/TSRM
)

# Check if PHP headers are found
if (NOT EXISTS "${PHP_SRC_DIR}/main/php.h" OR NOT EXISTS "${PHP_SRC_DIR}/Zend/zend.h" OR NOT EXISTS "${PHP_SRC_DIR}/TSRM/TSRM.h")
message(FATAL_ERROR "Could not find PHP headers. Please ensure PHP_SRC_DIR is set correctly.")
else()
message(STATUS "Found PHP headers in ${PHP_SRC_DIR}")
endif()

# PHP binding
add_library(carbon_php SHARED bindings/php/carbon_php.c)
target_include_directories(carbon_php PUBLIC ${PHP_SRC_DIR}/main ${PHP_SRC_DIR}/Zend ${PHP_SRC_DIR}/TSRM ${PHP_SRC_DIR})
target_link_libraries(carbon_php carbon)

# Python binding
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})

set(CYTHON_PYX_FILE ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python/carbon.pyx)
set(CYTHON_C_FILE ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python/carbon.c)

add_custom_command(
OUTPUT ${CYTHON_C_FILE}
COMMAND cython --cplus -3 ${CYTHON_PYX_FILE} -o ${CYTHON_C_FILE}
DEPENDS ${CYTHON_PYX_FILE}
COMMENT "Generating C source from ${CYTHON_PYX_FILE}"
)

add_library(carbon_python MODULE ${CYTHON_C_FILE})
target_link_libraries(carbon_python ${PYTHON_LIBRARIES} carbon)
target_include_directories(carbon_python PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bindings/python)

# Ruby binding
add_library(carbon_ruby SHARED bindings/ruby/carbon_ruby.c)
target_include_directories(carbon_ruby PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bindings/ruby)
target_link_libraries(carbon_ruby carbon)

# Node.js binding
add_library(carbon_node SHARED bindings/node/carbon_node.cpp)
target_include_directories(carbon_node PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/bindings/node)
target_link_libraries(carbon_node carbon)
Я создал README.md в репозитории. Если вы пытаетесь запустить его локально, ознакомьтесь с инструкциями по установке.
Заранее благодарим всех, кто готов помочь!

Подробнее здесь: https://stackoverflow.com/questions/785 ... ing-php-fe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»