php_embed_init() not found in php5.dll after compilation of Embed SAPI on Windows

From: Date: Wed, 12 Oct 2011 17:21:10 +0000
Subject: php_embed_init() not found in php5.dll after compilation of Embed SAPI on Windows
Groups: php.internals.win 
Request: Send a blank email to internals-win+get-837@lists.php.net to get a copy of this message
Hi ! I am currently trying to embed php5(ts).dll (embed shared) with a basic C++ program (basic command line program) on win32. I successfully compiled PHP 5.4 (dev, today's snapshot) using the procedure described at https://wiki.php.net/internals/windows/stepbystepbuild on a brand new windows 7 32 bits installation (on a Virtual Machine), using Visual C++ 2008 Express and Windows SDK 6.1. In a Windows SDK command shell (after a setenv /xp ... and buildconf ....), here is my configure (example for the non-Thread Safety version) : $ configure --disable-all --enable-embed --disable-zts ("embed" sapi is enabled in the output log) Then, I did : $ nmake I got the released dll in ./Release/php5.dll Then, I tried to load this library dynamically using windows API in a dummy program that take the dll path as an argument : -- #include <sapi/embed/php_embed.h> int main(int argc, char *argv[]) { if (2 > argc) { printf("Syntax: %s <path/to/php5.dll>\n", argv[0]); return -1; } printf("Loading %s ...\n", argv[1]); HMODULE l = LoadLibrary(argv[1]); if (NULL == l) { printf("Error: unable to load '%s'\n", argv[1]); return -1; } printf("%s loaded.\n", argv[1]); typedef int (*php_embed_init_t) (int, char ** PTSRMLS_DC); php_embed_init_t php_embed_init = (php_embed_init_t) GetProcAddress(l, "php_embed_init"); if (NULL == php_embed_init) { printf("Error: unable to find function php_embed_init() in PHP shared library (#%i)\n", GetLastError()); return -1; } printf("php_embed_init() found.\n"); php_embed_init(argc, argv PTSRMLS_CC); // ... -- The program (phplibtest) successfully compiles (I added the right include paths and some defines). I execute it using : $ phplibtest C:\php-sdk\php54dev\vc9\x86\php5.4-201110111430\Release\php5.dll And then got : -- Loading C:\php-sdk\php54dev\vc9\x86\php5.4-201110111430\Release\php5.dll .... C:\php-sdk\php54dev\vc9\x86\php5.4-201110111430\Release\php5.dll loaded. Error: unable to find function php_embed_init() in PHP shared library (#127) -- So, unable to find the php_embed_init() function in the php5.dll using GetProcAddress(). I checked the php5.dll using Dependency Walker, and unable to find php_embed_init() function in the list of exported function. Can you help me figure out where is the problem ? Thanks ! PS: I did the same failing test using PHP 5.3.8. Olivier Hoareau

« previous php.internals.win (#837) next »