Skip to content

fatal error C1041: cannot open program database; if multiple CL.EXE write to the same .PDB file, please use /FS #17547

Closed as not planned

Description

@LuisAlejandro

Description

For a personal project, I've been trying to compile PHP using the static php cli tool, which downloads and compiles php-src. I'm using the following command (Windows 10, x64):

spc.exe build -vvv --debug --build-cli "bcmath,calendar,ctype,curl,dba,dom,exif,filter,fileinfo,iconv,mbstring,mbregex,openssl,pdo,pdo_mysql,pdo_sqlite,phar,simplexml,sockets,sqlite3,tokenizer,xml,xmlreader,xmlwriter,zip,zlib,session,gd"

It fails with the error:

NMAKE : fatal error U1077: '"cl.exe" ...

Which comes from:

win32\getrusage.c: fatal error C1041: cannot open program database 'C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\vc140.idb'; if multiple CL.EXE write to the same .PDB file, please use /FS

I tried modifying this line on php-src/win32/build/confutils.js to add the /FS flag to the command. I replaced:

	DEFINE("CFLAGS_PHP", "/D _USRDLL /D PHP7DLLTS_EXPORTS /D PHP_EXPORTS \
	/D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=" + WINVER);

To:

	DEFINE("CFLAGS_PHP", "/FS /D _USRDLL /D PHP7DLLTS_EXPORTS /D PHP_EXPORTS \
	/D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=" + WINVER);

I checked and the command effectively had the /FS flag, but it didn't work, it kept failing. Any ideas?

Here's the relevant part of the log:

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\\x64\mc.exe" -h win32\ -r C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\ -x C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\ win32\build\wsyslog.mc
MC: Compiling win32\build\wsyslog.mc
zend.c
zend_API.c
zend_alloc.c
zend_ast.c
zend_atomic.c
zend_attributes.c
zend_builtin_functions.c
zend_call_stack.c
zend_closures.c
zend_compile.c
zend_constants.c
zend_cpuinfo.c
zend_default_classes.c
zend_enum.c
zend_exceptions.c
zend_execute.c
zend_execute_API.c
zend_extensions.c
zend_fibers.c
zend_float.c
zend_gc.c
zend_generators.c
zend_hash.c
zend_highlight.c
zend_hrtime.c
zend_inheritance.c
zend_ini.c
zend_ini_parser.c
zend_ini_scanner.c
zend_interfaces.c
zend_iterators.c
zend_language_parser.c
zend_language_scanner.c
zend_list.c
zend_llist.c
zend_multibyte.c
zend_object_handlers.c
zend_objects.c
zend_objects_API.c
zend_observer.c
zend_opcode.c
zend_operators.c
zend_ptr_stack.c
zend_smart_str.c
zend_sort.c
zend_stack.c
zend_stream.c
zend_string.c
zend_strtod.c
zend_system_id.c
zend_variables.c
zend_virtual_cwd.c
zend_vm_opcodes.c
zend_weakrefs.c
block_pass.c
compact_literals.c
compact_vars.c
dce.c
dfa_pass.c
escape_analysis.c
nop_removal.c
optimize_func_calls.c
optimize_temp_vars_5.c
pass1.c
pass3.c
sccp.c
scdf.c
zend_call_graph.c
zend_cfg.c
zend_dfg.c
zend_dump.c
zend_func_info.c
zend_inference.c
zend_optimizer.c
zend_ssa.c
SAPI.c
fopen_wrappers.c
getopt.c
internal_functions.c
main.c
network.c
output.c
C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\zipconf.h(16): warning C4005: 'ZIP_STATIC': macro redefinition (compiling source file main\internal_functions.c)
C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\ext\bcmath\libbcmath\src\../../../../main/config.w32.h(286): note: see previous definition of 'ZIP_STATIC' (compiling source file main\internal_functions.c)
C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\main\config.w32.h(286): warning C4005: 'ZIP_STATIC': macro redefinition (compiling source file main\internal_functions.c)
C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\zipconf.h(16): note: see previous definition of 'ZIP_STATIC' (compiling source file main\internal_functions.c)
php_content_types.c
php_ini.c
php_ini_builder.c
php_odbc_utils.c
php_open_temporary_file.c
php_scandir.c
php_syslog.c
php_ticks.c
php_variables.c
reentrancy.c
rfc1867.c
safe_bcmp.c
snprintf.c
spprintf.c
strlcat.c
strlcpy.c
cast.c
filter.c
glob_wrapper.c
memory.c
mmap.c
plain_wrapper.c
streams.c
transports.c
userspace.c
xp_socket.c
codepage.c
console.c
fnmatch.c
ftok.c
getrusage.c
glob.c
win32\getrusage.c: fatal error C1041: cannot open program database 'C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\vc140.idb'; if multiple CL.EXE write to the same .PDB file, please use /FS
globals.c
inet.c
ioutil.c
nice.c
readdir.c
registry.c
select.c
sendmail.c
signal.c
sockets.c
time.c
winutil.c
wsyslog.c
NMAKE : fatal error U1077: '"cl.exe" /D _USRDLL /D PHP7DLLTS_EXPORTS /D PHP_EXPORTS /D LIBZEND_EXPORTS /D TSRM_EXPORTS /D SAPI_EXPORTS /D WINVER=0x0601 -Iext/bcmath/libbcmath/src /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_BZLIB_H=1   /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_CURL_EASY_H=1 /DHAVE_OPENSSL_SSL_H=1 /D CURL_STATICLIB /D PHP_CURL_EXPORTS=1 /Iext/date/lib /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DHAVE_TIMELIB_CONFIG_H=1 /wd4244 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D DBA_FLATFILE=1 /D DBA_CDB=1 /D DBA_CDB_MAKE=1 /D DBA_CDB_BUILTIN=1 /D DBA_INIFILE=1 /Iext\fileinfo/libmagic /Iext\fileinfo /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "ext\gd\libgd" /DHAVE_GD_H=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libpng16" /DHAVE_PNG_H=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_ICONV_H=1 -Iext/gd/libgd /D PHP_GD_EXPORTS=1 /D HAVE_GD_GET_INTERPOLATION /I "ext/hash/sha3/generic64lc" /DHAVE_KECCAKHASH_H=1 /DKeccakP200_excluded /DKeccakP400_excluded /DKeccakP800_excluded /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "ext/hash/murmur" /DHAVE_PMURHASH_H=1 /I "ext/hash/xxhash" /DHAVE_XXHASH_H=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_ICONV_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D PHP_ICONV_EXPORTS /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DHAVE_MBSTRING_H=1  -Iext/mbstring -Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_ONIGURUMA_H=1 /DONIG_EXTERN=extern /DPHP_ONIG_BAD_KOI8_ENTRY=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_OPENSSL_SSL_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 -Iext/pcre/pcre2lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D HAVE_CONFIG_H /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /DHAVE_WINSOCK_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D PHP_SOCKETS_EXPORTS=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_SQLITE3_H=1 /DHAVE_SQLITE3EXT_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "ext/date/lib" /DHAVE_TIMELIB_CONFIG_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1  /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_ZIP_H=1 /DHAVE_ZIPCONF_H=1 /D _WIN32 /D HAVE_SET_MTIME /D HAVE_ENCRYPTION /D HAVE_LIBZIP_VERSION /D HAVE_PROGRESS_CALLBACK /D HAVE_CANCEL_CALLBACK /D HAVE_METHOD_SUPPORTED /D LZMA_API_STATIC /D ZLIB_EXPORTS /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_PARSER_H=1 /DHAVE_LIBXML_TREE_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D LIBXML_STATIC /D LIBXML_STATIC_FOR_DLL /D HAVE_WIN32_THREADS /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_PARSER_H=1 /D LIBXML_STATIC /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1   /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /DHAVE_SQLITE3_H=1 /DHAVE_SQLITE3EXT_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_TREE_H=1 /D LIBXML_STATIC /D PHP_SIMPLEXML_EXPORTS /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_PARSER_H=1 /DHAVE_LIBXML_TREE_H=1 /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /D LIBXML_STATIC /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_PARSER_H=1 /DHAVE_LIBXML_TREE_H=1 /D LIBXML_STATIC /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include\libxml2" /DHAVE_LIBXML_XMLWRITER_H=1 /D LIBXML_STATIC /nologo /I . /I main /I Zend /I TSRM /I ext /D _WINDOWS /D WINDOWS=1 /D ZEND_WIN32=1 /D PHP_WIN32=1 /D WIN32 /D _MBCS /D _USE_MATH_DEFINES /FD /wd4996 /Zc:inline /Zc:__cplusplus /d2FuncCache1 /Zc:wchar_t /MP /LD /MT /Ox /D NDebug /D NDEBUG /GF /D ZEND_DEBUG=0 /I "C:\Users\Luis\Development\gymcontrol\src\backend\buildroot\include" /D FD_SETSIZE=256 /FoC:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\ /FpC:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\ /FRC:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\ /FdC:\Users\Luis\Development\gymcontrol\src\backend\source\php-src\x64\Release\win32\ /D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1 /d2FuncCache1 /c win32\codepage.c win32\console.c win32\fnmatch.c win32\ftok.c win32\getrusage.c win32\glob.c win32\globals.c win32\inet.c win32\ioutil.c win32\nice.c win32\readdir.c win32\registry.c win32\select.c win32\sendmail.c win32\signal.c win32\sockets.c win32\time.c win32\winutil.c win32\wsyslog.c' : return code '0x2'
Stop.
[17:01:17] [ERRO] Uncaught SPC\exception\RuntimeException: Command run failed with code[2]: cd /d "C:\Users\Luis\Development\gymcontrol\src\backend\source\php-src" && C:\Users\Luis\Development\gymcontrol\src\backend\php-sdk-binary-tools\phpsdk-vs17-x64.bat -t nmake_cli_wrapper.bat --task-args php.exe at phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/globals/functions.php(158)
[17:01:17] [ERRO] #0 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/SPC/util/WindowsCmd.php(52): f_passthru('cd /d "C:\\Users...')
#1 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/SPC/builder/windows/WindowsBuilder.php(163): SPC\util\WindowsCmd->exec('cd /d "C:\\Users...')
#2 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/SPC/builder/windows/WindowsBuilder.php(132): SPC\builder\windows\WindowsBuilder->buildCli()
#3 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/SPC/command/BuildCliCommand.php(180): SPC\builder\windows\WindowsBuilder->buildPHP(1)
#4 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/src/SPC/command/BaseCommand.php(107): SPC\command\BuildCliCommand->handle()
#5 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/vendor/symfony/console/Command/Command.php(326): SPC\command\BaseCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/vendor/symfony/console/Application.php(1078): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/vendor/symfony/console/Application.php(324): Symfony\Component\Console\Application->doRunCommand(Object(SPC\command\BuildCliCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/vendor/symfony/console/Application.php(175): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 phar://C:/Users/Luis/Development/gymcontrol/src/backend/spc.exe/bin/spc(20): Symfony\Component\Console\Application->run()
#10 C:\Users\Luis\Development\gymcontrol\src\backend\spc.exe(8): require('phar://C:/Users...')
#11 {main}

Could you help me debug?
Thanks

PHP Version

PHP 8.3.12

Operating System

Windows 10

Activity

  1. cmb69 commented on Jan 22, 2025

    @cmb69
    Member

    Simplest solution should be to apply the following patch:

     win32/build/confutils.js | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/win32/build/confutils.js b/win32/build/confutils.js
    index e992d0935f..3f51ce0152 100644
    --- a/win32/build/confutils.js
    +++ b/win32/build/confutils.js
    @@ -3450,7 +3450,7 @@ function toolset_setup_build_mode()
     {
     	if (PHP_DEBUG == "yes") {
     		ADD_FLAG("CFLAGS", "/LDd /MDd /Od /U NDebug /U NDEBUG /D ZEND_DEBUG=1 " +
    -			(TARGET_ARCH == 'x86'?"/ZI":"/Zi"));
    +			"/Z7");
     		ADD_FLAG("LDFLAGS", "/debug");
     		// Avoid problems when linking to release libraries that use the release
     		// version of the libc
    @@ -3458,7 +3458,7 @@ function toolset_setup_build_mode()
     	} else {
     		// Generate external debug files when --enable-debug-pack is specified
     		if (PHP_DEBUG_PACK == "yes") {
    -			ADD_FLAG("CFLAGS", "/Zi");
    +			ADD_FLAG("CFLAGS", "/Z7");
     			ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
     		}
     		ADD_FLAG("CFLAGS", "/LD /MD");

    I don't quite understand, though, why you are asking here, when you use a tool developed elsewhere.

  2. LuisAlejandro commented on Jan 22, 2025

    @LuisAlejandro
    Author

    @cmb69 Thanks! I'll try that.

  3. cmb69 commented on Jan 23, 2025

    @cmb69
    Member

    I had a look at static-php-cli, but I'm not sure how these builds are done. Possibly, they enable /MP even for debug builds (or maybe do some other form of parallel builds), and that likely causes issues. I've faced the same problem when working on the expermental Ninja builds, and the patch above solved the issue for me.

    Anyhow, not a php-src issue, so I'm closing.

  4. LuisAlejandro commented on Jan 23, 2025

    @LuisAlejandro
    Author

    @cmb69 Thanks, I solved it by not compiling php and just download a prebuilt binary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions